comparison twitter_api.c @ 330:cc41ee1f5d3a

implemented reply, favorite, retweet functionalities. these are quite raw, be careful!
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 12 Oct 2009 21:51:13 +0900
parents 18d3e7c582de
children 227852ee649c
comparison
equal deleted inserted replaced
329:300241bd1879 330:cc41ee1f5d3a
15 15
16 #ifdef _WIN32 16 #ifdef _WIN32
17 extern gboolean blink_state; 17 extern gboolean blink_state;
18 extern gboolean blink_modified; 18 extern gboolean blink_modified;
19 #endif 19 #endif
20
21 extern guint64 reply_to_msgid;
22 extern PurpleAccount *account_for_twitter;
20 23
21 /**************************/ 24 /**************************/
22 /* API base get functions */ 25 /* API base get functions */
23 /**************************/ 26 /**************************/
24 /* xml parser */ 27 /* xml parser */
259 262
260 sender = g_strdup("twitter@twitter.com"); 263 sender = g_strdup("twitter@twitter.com");
261 264
262 PurpleMessageFlags flag = PURPLE_MESSAGE_RECV; 265 PurpleMessageFlags flag = PURPLE_MESSAGE_RECV;
263 266
264 msg = g_strdup_printf("%s: %s", st->screen_name, st->text); 267 msg = g_strdup_printf("%s: %s ptmsgid=%llu",
268 st->screen_name, st->text,
269 (long long unsigned int)st->id);
265 270
266 /* apply filter */ 271 /* apply filter */
267 if(purple_prefs_get_bool(OPT_FILTER)) { 272 if(purple_prefs_get_bool(OPT_FILTER)) {
268 apply_filter(&sender, &msg, &flag, twitter_service); 273 apply_filter(&sender, &msg, &flag, twitter_service);
269 } 274 }
321 basic_auth_encoded = purple_base64_encode((unsigned char *)basic_auth, 326 basic_auth_encoded = purple_base64_encode((unsigned char *)basic_auth,
322 strlen(basic_auth)); 327 strlen(basic_auth));
323 g_free(basic_auth); 328 g_free(basic_auth);
324 329
325 /* header */ 330 /* header */
326
327 header = g_strdup_printf(TWITTER_STATUS_GET, count, basic_auth_encoded); 331 header = g_strdup_printf(TWITTER_STATUS_GET, count, basic_auth_encoded);
328 request = g_strconcat(header, "\r\n", NULL); 332 request = g_strconcat(header, "\r\n", NULL);
329 333
330 /* invoke fetch */ 334 /* invoke fetch */
331 purple_util_fetch_url_request(TWITTER_BASE_URL, FALSE, 335 purple_util_fetch_url_request(TWITTER_BASE_URL, FALSE,
507 511
508 status = g_strdup_printf(TWITTER_STATUS_FORMAT, url_encoded); 512 status = g_strdup_printf(TWITTER_STATUS_FORMAT, url_encoded);
509 header = g_strdup_printf(TWITTER_STATUS_POST, basic_auth_encoded, 513 header = g_strdup_printf(TWITTER_STATUS_POST, basic_auth_encoded,
510 (int)strlen(status)); 514 (int)strlen(status));
511 515
512 request = g_strconcat(header, "\r\n", status, "\r\n", NULL); 516 if(reply_to_msgid > 0) {
517 char *inreply = NULL;
518 inreply = g_strdup_printf(TWITTER_REPLY_FORMAT,
519 (long long unsigned int)reply_to_msgid);
520 request = g_strconcat(header, "\r\n", status, "\r\n",
521 inreply, "\r\n", NULL);
522 reply_to_msgid = 0;
523 g_free(inreply);
524 }
525 else {
526 request = g_strconcat(header, "\r\n", status, "\r\n", NULL);
527 }
513 528
514 purple_util_fetch_url_request(TWITTER_BASE_URL, FALSE, 529 purple_util_fetch_url_request(TWITTER_BASE_URL, FALSE,
515 NULL, TRUE, request, TRUE, 530 NULL, TRUE, request, TRUE,
516 post_status_with_api_cb, tm); 531 post_status_with_api_cb, tm);
517 532
520 g_free(status); 535 g_free(status);
521 g_free(request); 536 g_free(request);
522 537
523 } 538 }
524 539
540 static void
541 fav_with_api_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
542 const gchar *url_text, size_t len,
543 const gchar *error_message)
544 {
545 /* dummy */
546 }
547
548 void
549 fav_with_api(guint64 id)
550 {
551 char *header, *request;
552 char *basic_auth, *basic_auth_encoded;
553
554 const char *screen_name =
555 purple_prefs_get_string(OPT_SCREEN_NAME_TWITTER);
556 const char *password = purple_prefs_get_string(OPT_PASSWORD_TWITTER);
557
558 if (!screen_name || !password || !screen_name[0] || !password[0]) {
559 twitter_debug("screen_name or password is empty\n");
560 return;
561 }
562
563 basic_auth = g_strdup_printf("%s:%s", screen_name, password);
564 basic_auth_encoded = purple_base64_encode((unsigned char *)basic_auth,
565 strlen(basic_auth));
566 g_free(basic_auth);
567
568
569 header = g_strdup_printf(TWITTER_FAV_POST,
570 (long long unsigned int)id,
571 basic_auth_encoded);
572 request = g_strconcat(header, "\r\n", NULL);
573
574 purple_util_fetch_url_request(TWITTER_BASE_URL, FALSE,
575 NULL, TRUE, request, TRUE,
576 fav_with_api_cb, NULL);
577 twitter_debug("request = %s\n", request);
578
579 g_free(header);
580 g_free(basic_auth_encoded);
581 g_free(request);
582 }
583
525 void 584 void
526 signed_on_cb(PurpleConnection *gc) 585 signed_on_cb(PurpleConnection *gc)
527 { 586 {
528 PurpleAccount *account; 587 PurpleAccount *account;
529 PurpleBuddy *buddy; 588 PurpleBuddy *buddy;
544 buddy = purple_find_buddy(account, name); 603 buddy = purple_find_buddy(account, name);
545 if(!buddy) { 604 if(!buddy) {
546 twitter_debug("no buddy\n"); 605 twitter_debug("no buddy\n");
547 return; 606 return;
548 } 607 }
608
609 account_for_twitter = account;
549 610
550 gconv = purple_find_conversation_with_account( 611 gconv = purple_find_conversation_with_account(
551 PURPLE_CONV_TYPE_IM, name, account); 612 PURPLE_CONV_TYPE_IM, name, account);
552 if(!gconv) { 613 if(!gconv) {
553 gconv = purple_conversation_new( 614 gconv = purple_conversation_new(