Twitter アプリの API 変更
先日、
\ホノカチャン‼/ on Twitter: "@furyutei 久しぶりに @wedata_update の存在思い出したのですが、6/9で止まっているのは、やっぱりtwitter APIの問題なんでしょうか。"@furyutei 久しぶりに @wedata_update の存在思い出したのですが、6/9で止まっているのは、やっぱりtwitter APIの問題なんでしょうか。
2013-07-26 21:35:26 via web to @furyutei
という指摘を受けたので、諸々の事情によりしばらく Web から遠ざかっていて Twitter API のバージョンが 1 から 1.1 に変更されることもスルーしていた(マテ)自分は、途方にくれたわけですが。
さすがに3年近くほったらかしだと、あちこち問題がでるもんだ<Web アプリ。
だって、この記事読んだら
【1】REST APIの変更点
Twitter APIと開発者規約変更のインパクトまとめ:結局、Twitter API 1.1で何が変わる? 5つのポイント - @IT
多くのAPIはエンドポイントURLが変わるだけですが、一部廃止・変更もあるので、注意が必要です。公式ドキュメントに廃止・変更になるAPIのリストがないので、以下にまとめました。![]()
ってあるから、あー、エンドポイントの書き換えで大体対応できるのか〜と気軽に構えた後、念のためDocumentation | Twitter Developersで確認したら、中身も結構違うAPIも多いじゃないですか。
とり急ぎ、よく使っている奴だけ書き換えましたが<自作のGoogle App Engine用 Twitter ライブラリ by Python。公開できるようなレベルじゃないしなぁ。
とりあえず、wedata更新情報 (@wedata_update) | Twitterとかほんのつぶやき (@honnotsubuyaki) | Twitterとかが、動くようになる…かも知れません。
なお、ほんのつぶやきは、これまで無差別に返していたのですが、フォローしてくれている方だけに返るように修正しました。
Googleの短縮URLサービスAPI (goo.gl)
かつて参考にさせて頂いた、Google URL Shortener APIを利用する - DiaryExceptionの方法では401が返ってくるようになっていたので、Googleの短縮URLサービスAPI goo.gl をPHPから使用する|プログラムメモ
の記事を参考に、正規の方法で取得するようにしました。
#! /bin/env python # -*- coding: utf-8 -*- #============================================================================== # Shorten URL by goo.gl # Document: https://developers.google.com/url-shortener/v1/getting_started?hl=ja#shorten #============================================================================== import urllib import urllib2 try: # for Python 2.7 on Google App Engine import json as simplejson if not getattr(simplejson, 'loads') or not getattr(simplejson, 'dumps'): throwError(u'module not have nessessary attribute') except Exception, s: # for Python 2.5 on Google App Engine from django.utils import simplejson URL_API_ENDPOINT = 'https://www.googleapis.com/urlshortener/v1/url' API_KEY = '##### Your API Key #####' # Reference: https://developers.google.com/url-shortener/v1/getting_started?hl=ja#APIKey def get_short_url(uri): #{ short_url = uri while True: url = '%s?key=%s' % (URL_API_ENDPOINT, API_KEY) data = simplejson.dumps(dict(longUrl = uri)) headers = {'Content-Type': 'application/json'} req = urllib2.Request(url, data, headers) rsp = urllib2.urlopen(req) if rsp.code < 200 or 300 <= rsp.code: break result_dict = simplejson.loads(rsp.read()) short_url = result_dict.get('id',uri) break return short_url #} // end of get_short_url() if __name__ == "__main__": import sys argv = sys.argv argc = len(argv) if argc != 2: print u'Shorten URL by goo.gl\nUsage: %s <original-url>' % (argv[0]) exit(1) short_url = get_short_url(argv[1]) print short_url exit(0) # ■ end of file
…が、よく考えれば、Twitter投稿なら URL は勝手に短縮されるわけで、あまり意味がなく、せっかく修正した機能も使っていない、という。
Twitpic への投稿
なぜか、いつの間にか Twitpic への画像投稿がうまくいかなくなっていました。
しばらくhttp://dev.twitpic.com/docs/2/upload/とにらめっこしていましたが、特に変なことをしていないはずなのに……。
かなり経ってから、ようやく、
X-Auth-Service-Provider (Required)
http://dev.twitpic.com/docs/2/upload/
https://api.twitter.com/1/account/verify_credentials.json![]()
に気づく。これ、
になおさなきゃだめなんじゃ……。
…はい、なおりました。
でも、考えてみれば、Twitterには画像を直接投稿できるので(POST statuses/update_with_media (deprecated) | Twitter Developers)そちらを使うことで、これもTwitpicのAPIも未使用ということに。
おまけ
随分前から動かなくなっていたのには気が付いていたが、放置してあった「TwitDungeon」を、Twitter API 1.1 対応ライブラリのテスト用に動かしてみた。
で、久しぶりに試してみたら、割と興味深い。
デフォルトの開始地点は自分が中心。
Twitter認証で自分のアカウントを使った場合。
ランダムで(実はランダムにする意図はないが、Twitter の API 結果がランダムで返ってくる)フォローしている人のうちの120名までが左上にタイル状に表示され、これを[j][k][h][l]([↓][↑][←][→])で上下左右に移動。
途中、[v]を押すと最近のツイートが表示される([a]で移動のたびに自動表示)。
……だけど、すぐAPI回数制限(「429: Too Many Requests」)にひっかかるのが難点。
[d]で、カーソルがある人のところに潜ると、その人がフォローしている人がまた120名までランダムでタイル表示。
要は、少し変わった形で、フォローしている人を辿っていけるだけのアプリだけれど、誰がどんな人をフォローしているのかが視覚的にわかるので、割と楽しめる。