ラベル Twitter の投稿を表示しています。 すべての投稿を表示
ラベル Twitter の投稿を表示しています。 すべての投稿を表示

2012年10月30日

Twitter 関連のライブラリを API 1.1 に対応させるのは結構大変

Python から Twitter API を扱うライブラリに「tweepy」があるが、これは API 1.1 に対応していない。
そこで、API 1.1 の調査を兼ねていろいろ変更してみている「sakito / tweepy — Bitbucket」。

単純に endpoint を 1.1 にするだけでも大丈夫そうな感じがするが、細かい所まで対応しようとするとかなり大変。
使う機能以外を気にすると時間がかかりすぎる気がするので主要な機能だけ、徐々に対応してみようと思う。

2012年9月10日

Python OAuth ライブラリ rauth で Twitter API v1.1 を利用する

概要

Twitter API v1.1 が公開されました。 全ての endpoint で OAuth 1.0a での認証が必須になっています。
Python のライブラリで OAuth 1.0aの認証が簡単にコーディングできる「rauth」から、Twitter API v1.1 を利用してみます。

rauth に関して

rauth」は OAuth 1.0/a, 2.0、Oflyの認証に対応した Python のライブラリです。
Python の HTTPライブラリである「requests」に依存しています。
requests」が非常にすぐれたライブラリで、その機能を有効に利用しているため、「rauth」はかなり簡単に OAuth 認証のコーディングが可能です。
ライセンスは MIT ライセンスです。残念ながら Python 3 には現在対応していない模様です。

インストール

pip でインストールします。

pip install rauth

rauth は「requests」に依存していますが、pip なら依存関係を解決してインストールされます。

Twitter API v1.1 にアクセスしてみる

「access_token」、「access_token_secret」は取得済みの状態とします。
以下は、「search/tweets」の「application/rate_limit_status」を取得するサンプルです。unittest として記述しています。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest

from rauth.service import OAuth1Service


class TestApi(unittest.TestCase):
    """Twitter API test"""

    def test_oauth(self):
        auth = OAuth1Service(
            name='twitter',
            consumer_key='consumer_key',
            consumer_secret='consumer_secret',
            request_token_url='https://api.twitter.com/oauth/request_token',
            access_token_url='https://api.twitter.com/oauth/access_token',
            authorize_url='https://api.twitter.com/oauth/authorize')
        self.assertIsNotNone(auth)
        response = auth.get(
            'https://api.twitter.com/1.1/application/rate_limit_status.json',
            access_token='access_token',
            access_token_secret='access_token_secret')
        content = response.content
        limit = content['resources']['search']['/search/tweets']['limit']
        self.assertEqual(180, limit)

if __name__ == '__main__':
    unittest.main()

つぶやいてみる

つぶやきを投稿するサンプルは以下になります。「application/rate_limit_status」の例を含めて多少汎用化してあります。Python 2.6、Python 2.7 で動作します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest

import datetime

from rauth.service import OAuth1Service


class TestApi(unittest.TestCase):
    """Twitter API test"""
    def setUp(self):
        self.auth = OAuth1Service(
            name='twitter',
            consumer_key='consumer_key',
            consumer_secret='consumer_secret',
            request_token_url='https://api.twitter.com/oauth/request_token',
            access_token_url='https://api.twitter.com/oauth/access_token',
            authorize_url='https://api.twitter.com/oauth/authorize',
            header_auth=True)
        self.access_token = {
            'access_token': 'access_token',
            'access_token_secret': 'access_token_secret'}
        self.endpoint = 'https://api.twitter.com/1.1/{path}.json'

    def test_get_rate_limit_status(self):
        """application/rate_limit_status test"""
        response = self.auth.get(
            self.endpoint.format(path='application/rate_limit_status'),
            **self.access_token)
        content = response.content
        limit = content['resources']['search']['/search/tweets']['limit']
        self.assertEqual(180, limit)

    def test_post_statuses_update(self):
        """statuses/update test"""
        text = 'つぶやきテストです。{now}'.format(now=datetime.datetime.now())
        params = {'status': text}
        response = self.auth.post(
            self.endpoint.format(path='statuses/update'),
            params=params,
            **self.access_token)
        content = response.content
        self.assertEqual(text.decode('utf-8'), content['text'])

if __name__ == '__main__':
    unittest.main()

まとめ

rauth」で Twitter API v1.1 を利用して、情報の取得と投稿ができました。Twitter API v1.1 がかなり整理されたことで、簡単な処理なら Twitter に特化したライブラリを利用する必要はほとんどないかもしれません。
rauth」は Twitter だけでなく OAuth 認証全般で利用できますので、試してみると良いでしょう。

2012年9月9日

Twitter API v1.1 を確認する

概要

2012年9月5日にTwitter社が API v1.1 の詳細を公開したので、確認してみます。

関連する文書

関連する文書は以下となります。

API v1.1の概要

Overview: Version 1.1 of the Twitter API | Twitter Developers」に概要が記述されています。

  • 各endpoint毎に15分毎の呼出回数制限が設定された。ほとんどが15分15回で、検索系APIのみ15分180回。発言も15分180回。
  • JSONだけになった。XMLやRSSは提供されない。
  • 全てのendpointでOAuth認証が必須になった。
  • つぶやきの表示形式が義務付けられた。
  • 10万を越えるユーザを抱えるクライアントは、それ以上ユーザを増やすには申請が必要。
  • API v1.0 は 2013年3月5日に停止される。
  • dev.twitter.com の文書は、v1.1用に更新される。
  • 意見はまだ募集しており、今後変更される可能性はある。

その他変更されたと思われる部分

まだ、十分さわれていないが、概要に書いていない部分で変更点がある模様。

  • 認証しないでアクセスした場合のHTTPステータスコードが v1.0 と異なる。v1.0 では 「400 Unauthorized」で、v1.1 では 「401 Bad Request」。
  • Streaming API の機能が増えて、よりリアルタイム性が増した。

個人的な意見

個人的な意見を書いておく。Twitter社には比較的同情的な立場。Twitter も比較的普通の使い方しかしてないと思われる。

  • REST API v1.1 Resources | Twitter Developers」を見ると非常に良く設計されたAPIだと感じる。かなりいろいろな事を考慮して作成されている。
  • v1.0 から v1.1 への移行は比較的容易になるように考慮されている。
  • 「認証」を前提とした設計になっていると強く感じる。
  • XML、RSS が提供されなくなるのは「認証」を前提とした時はある意味必然の結果に見える。
  • APIの制限が、v1.0は全てを合計して 350回/時 だったのが、v1.1 では endpoint 毎に 15回/15分や、180回/15分になったことで、おそらく API はより安定すると思われる。
  • 多くの人はタイムライン取得を1分に1回にしており(多くのついったクライアントのデフォルト値)、ほとんどの人がAPI制限にひかからない。むしろ増えたように感じるだろう。
  • 1分に1回以上タイムラインを取得したい場合は、Streaming API の user endpointを利用すれば可能。
  • モバイルに関しては iPhone/Android 以外はほとんど考慮していないと思われるが、普通の使い方の限り iPhone/Android でもあまり問題が無いように見える。iPhone/Android 上でも Streaming API は当然利用できる。
  • つぶやきの表示義務(Developer Display Requirements | Twitter Developers)は、必要な情報をちゃんと全部表示しろ、という義務に見える。
  • つぶやきの表示義務はTwitter公式クライアントも守れているのか怪しい。ちょっとおかしい感じ。
  • クライアントのユーザ10万制限は、Twitter側のインフラがそろそろ限界なのだろう。また、ほとんどのクライアントは10万いかず、10万を越えるほどのクライアントなら、申請すればちゃんと通るのではないか、と楽観的に考えている。
  • ヘビーユーザは、そろそろ別のサービスに移動する時期なのではないだろうか。Twitter 側はそれを認識しているように見える。
  • APIの設計から考えるに、Twitter 社は今回の決定をいかなる反対があっても断固として実行すると思われる。Twitter社はある意味おいつめられている感じがする。
  • API v1.1になっても依然として、「完全な」クライアントを作成することが可能な時点で、他の企業と比較しても明らかに異状な API 公開態度に見える。
  • 移行期限が長いか短いかで考えると、短い感じもするが、おそらく、年度をまたぐような延長は無いと思われる。3/5 という期限は非常に考慮してある感じだ。
  • 今回の件でクライアントの一部が開発を終了したり、ユーザに混乱が発生するだろうが、ほとんどは時間が解決するだろう。
  • ユーザが騒いでも、Twitter社にとってはほとんど問題にならない規模だろう。

まとめ

変な所には意見を言うべきかと思う。
ただ、全体的に良くできているため、最終的には、ヘビーユーザの一部が離れ、クライアントが整理され、botが多少減り、一般ユーザはあまり困らない、という結果になるのでやないか、と今の所は楽観視している。

2008年10月6日

Mac OS X 10.5 で crochet を動かしてみる

crochetとは@showyouが作成している、Twitter用クライアント。
Pythonで作成されている。

以前も動作させたことがあるのだけどメモってなかったので今回は動かすまでをメモしておく。
参考にするサイト
crochet紹介 - Showyou@hatena Mac で crochet というか wxPython で作られたアプリを動かすお話 - yano3の日記
wxPythonのインストール
http://sourceforge.net/projects/wxpython/
http://downloads.sourceforge.net/wxpython/wxPython2.8-osx-unicode-2.8.9.1-universal-py2.5.dmg

バイナリなのでダブルクリックすれば良い。
simplejsonのインストール
http://code.google.com/p/simplejson/
http://pypi.python.org/pypi/simplejson

tar xvfz simplejson-2.0.1.tar.gz
cd simplejson-2.0.1
sudo python setup.py install
PILのインストール
http://www.pythonware.com/products/pil/
tar xvfz Imaging-1.1.6.tar.gz
cd Imaging-1.1.6
sudo python setup.py install
crochet
svn export -r HEAD http://svn.coderepos.org/share/lang/python/crochet
cd crochet
.chat/twdata の中にユーザ名とパスワードを設定して起動する。
./chat_all.py
起動して、投稿まではできた。

で、本当の目的は
エラー - showyouの日記とhamaの成長記録 - はてなグループ::ついったー部
に記述のある内容の再現と調査だったのですが、こういう時にかぎって再現しねー
AquaSKKが起動してると落る現象と、終了するとPy_Finalizeよばれる所でエラーの出る現象は出たけどcrochetの問題ではないような。
とりあえずしばらく動作させないと再現しなそう。

2008年5月25日

tiwtx.user.js 追記

昨晩アップロードした物にミスというかバグがあったので修正しました。 tiwtx.user.jsですが、元と名前を変更しているのはオリジナルが更新された場合に混乱が発生しないようにするためです。 ブラウザ上での色や表示位置も変更してありますのでご了承ください。 昨日のエントリーの補足もしておきます。 オリジナルのtiwt.user.jsがFirefox3で動作しないというのは、正確にはFirefox3で動作するGreasemonkey最新版(SVN先端版)で動作しないという意味です。 昨日のエントリーでjsの自動インストールができないと書いてありますが、Google Pagesでアップロード直後は上手く動作しなかったのですが、しばらくしたら自動インストール可能なようです。

2008年5月24日

tiwt.user.jsの改造版

tiwt.user.jsというのは FirefoxのGreasemonkeyで動作するスクリプトでtwitterへの投稿をFirefoxから行なえます。 以下で配布しています。 System.Exit - tiwt.user.js このスクリプト便利なのですがFirefox3では動作しないようです。 前からいろいろ直したい所もあったのでこの際なので改造してみる事にしました。 Twitter / jugyo: @sakito えっと、じゃあ、GPL ということでお願いします 09:44 AM May 19, 2008 とGPLの旨の確認が取れたので変更した物をGPLで公開します。 改造したい所はいくつかありますが、まず改造したかったのは、85行目の画像部分です。 通常Greasemonkey内で画像を利用する場合は Base64化して埋めこむのが普通ですので以下のようなコマンドを実行してBase64化して画像埋め込みにしました。
openssl base64 -e -in loader.gif | tr -d '\n'
あと、入力欄に今見てるサイトのURLが出るのはあまり利用しないので、空白にしました。 とりあえずこの変更だけした物をtiwtx.user.jsに公開しておきます。自動インストールはできないのでダウンロード後Firefoxにドラッグドラップして自分でインストールしてください。 追記:このエントリーには追記があります。tiwtx.user.js 追記 追記(2008/05/26):この版はFirefox2でしか動作しません。