Mercurial > pidgin-twitter
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( |