GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

sixohsix

twitter – Python Twitter API

投稿日:

Python Twitter API http://mike.verdone.ca/twitter/

Python Twitterツール

Python用のMinimalist Twitter APIは、Twitter用のPython APIです。外出先でも誰でも気に入っているWeb 2.0 Facebookスタイルのステータスアップデータです。

また、友人のつぶやきを取得し、お気に入りのシェルの安全性とセキュリティから自分のツイートを設定するTwitterコマンドラインツールと、IRCチャンネルにTwitterのアップデートをアナウンスできるIRCボットも含まれています。

詳細については、 twitterパッケージをインストールした後:

  • twitterパッケージをインポートしてhelp()を実行する
  • コマンドラインツールのヘルプのためにtwitter -hを実行する

twitter – コマンドラインツール

コマンドラインツールを使用すると、いくつか素晴らしいことができます:

  • あなたのつぶやき、最近の返信、およびつぶやきをリストで表示する
  • パブリックタイムラインを見る
  • 友達をフォローしてアンフォロー(離脱)する
  • ツイート情報の出力形式

一番下の行: twitter 、つぶやきを受信します。

twitterbot – IRC Bot

IRCボットは、Twitterアカウント(自分のアカウントまたはボット用に作成したアカウント)に関連付けられています。 ボットは、フォローしている友達からのすべてのツイートを発表します。 これは、IRC / msgコマンドを使ってフォローしたり、友達を残したりすることができます。

twitter-log

twitter-logはシンプルなコマンドラインツールで、指定されたユーザーからのパブリックツイートをシンプルなテキスト形式でダンプします。 あなたのすべてのつぶやきの完全なオフサイトバックアップを取得すると便利です。 twitter-logを実行し、指示を読んでください。

twitter-archivertwitter-follow

twitter-archiverは、投稿を開始して以来、どのユーザーからも投稿されたすべてのツイートをログに記録します。 twitter-followは、あるユーザー(またはユーザーが従うすべてのユーザー)のすべてのフォロワーのリストを出力します。

Twitter APIクラスを使ったプログラミング

TwitterおよびTwitterStreamクラスは、独自のTwitter対応アプリケーションを構築するための鍵です。

Twitterクラス

ミニマリストで完全機能のTwitter APIクラス。

このクラスのメンバーにアクセスしてRESTfulなデータを取得します。 結果はデコードされたpythonオブジェクト(リストとdicts)です。

Twitter APIは次の場所で文書化されています:

https://dev.twitter.com/overview/documentation

最もアクセス可能な関数のリストは、次の場所にリストされています。

https://dev.twitter.com/rest/public

例:

from twitter import *

t = Twitter(
    auth=OAuth(token, token_secret, consumer_key, consumer_secret))

# Get your "home" timeline
t.statuses.home_timeline()

# Get a particular friend's timeline
t.statuses.user_timeline(screen_name="billybob")

# to pass in GET/POST parameters, such as `count`
t.statuses.home_timeline(count=5)

# to pass in the GET/POST parameter `id` you need to use `_id`
t.statuses.oembed(_id=1234567890)

# Update your status
t.statuses.update(
    status="Using @sixohsix's sweet Python Twitter Tools.")

# Send a direct message
t.direct_messages.new(
    user="billybob",
    text="I think yer swell!")

# Get the members of tamtar's list "Things That Are Rad"
t.lists.members(owner_screen_name="tamtar", slug="things-that-are-rad")

# An *optional* `_timeout` parameter can also be used for API
# calls which take much more time than normal or twitter stops
# responding for some reason:
t.users.lookup(
    screen_name=','.join(A_LIST_OF_100_SCREEN_NAMES), _timeout=1)

# Overriding Method: GET/POST
# you should not need to use this method as this library properly
# detects whether GET or POST should be used, Nevertheless
# to force a particular method, use `_method`
t.statuses.oembed(_id=1234567890, _method='GET')

# Send images along with your tweets:
# - first just read images from the web or from files the regular way:
with open("example.png", "rb") as imagefile:
    imagedata = imagefile.read()
# - then upload medias one by one on Twitter's dedicated server
#   and collect each one's id:
t_upload = Twitter(domain='upload.twitter.com',
    auth=OAuth(token, token_secret, consumer_key, consumer_secret))
id_img1 = t_upload.media.upload(media=imagedata)["media_id_string"]
id_img2 = t_upload.media.upload(media=imagedata)["media_id_string"]
# - finally send your tweet with the list of media ids:
t.statuses.update(status="PTT ★", media_ids=",".join([id_img1, id_img2]))

# Or send a tweet with an image (or set a logo/banner similarily)
# using the old deprecated method that will probably disappear some day
params = {"media[]": imagedata, "status": "PTT ★"}
# Or for an image encoded as base64:
params = {"media[]": base64_image, "status": "PTT ★", "_base64": True}
t.statuses.update_with_media(**params)

# Attach text metadata to medias sent, using the upload.twitter.com route
# using the _json workaround to send json arguments as POST body
# (warning: to be done before attaching the media to a tweet)
t_upload.media.metadata.create(_json={
  "media_id": id_img1,
  "alt_text": { "text": "metadata generated via PTT!" }
})
# or with the shortcut arguments ("alt_text" and "text" work):
t_upload.media.metadata.create(media_id=id_img1, text="metadata generated via PTT!")

Twitterを検索中:

# Search for the latest tweets about #pycon
t.search.tweets(q="#pycon")

# Search for the latest tweets about #pycon, using [extended mode](https://developer.twitter.com/en/docs/tweets/tweet-updates)
t.search.tweets(q="#pycon", tweet_mode='extended')

APIレート制限に達した後に再試行

引数retry=True指定してTwitterインスタンスを作成するだけで、HTTPエラーコード429 、および504が最後のリクエストを再試行します。

retryが整数の場合、 retryの最大回数が定義されます。

返されたデータを使用する

Twitter API呼び出しは、デコードされたJSONを返します。 これはPythonのリスト、dicts、int、および文字列に変換されます。 例えば:

x = twitter.statuses.home_timeline()

# The first 'tweet' in the timeline
x[0]

# The screen name of the user who wrote the first 'tweet'
x[0]['user']['screen_name']

生のXMLデータの取得

TwitterデータをXML形式で取得したい場合は、インスタンス化するときにformat="xml"Twitterオブジェクトに渡しformat="xml"

twitter = Twitter(format="xml")

出力は決して解析されません。 XMLの生の文字列になります。

TwitterStreamクラス

TwitterStreamオブジェクトは、Twitter Stream APIへのインタフェースです。 メソッドを呼び出す結果がストリームからデコードされたオブジェクトを生成するイテレータになることを除いて、これはTwitterクラスとほぼ同じように使用できます。 例えば::

twitter_stream = TwitterStream(auth=OAuth(...))
iterator = twitter_stream.statuses.sample()

for tweet in iterator:
    ...do something with this tweet...

デフォルトでは、 TwitterStreamオブジェクトはパブリックストリームを使用します 他のストリーミングAPIのいずれかを使用する場合は、URLを手動で指定します。

これらのストリームにアクセスするには、適切な権限が必要です。 (たとえば、ダイレクトメッセージの場合は、 アプリケーションに「読み取り、書き込み、ダイレクトメッセージ」のアクセス許可が必要です)。

次の例は、ユーザーストリームからすべての新しい直接メッセージを取得する方法を示しています。

auth = OAuth(
    consumer_key='[your consumer key]',
    consumer_secret='[your consumer secret]',
    token='[your token]',
    token_secret='[your token secret]'
)
twitter_userstream = TwitterStream(auth=auth, domain='userstream.twitter.com')
for msg in twitter_userstream.user():
    if 'direct_message' in msg:
        print msg['direct_message']['text']

イテレータは、TCP接続が切断されるまで発生します。 接続が切断されると、イテレータは{'hangup': True} StopIteration {'hangup': True}StopIterationます(反復処理が再度StopIteration場合はStopIterationStopIterationします)。

同様に、ストリームが90秒を超えてハートビートを生成しない場合、反復子は{'hangup': True, 'heartbeat_timeout': True}StopIterationます(反復処理が再度StopIteration場合はStopIterationを発生します)。

timeoutパラメータは、利回りの最大時間を制御します。 ゼロでない場合、イテレーターはタイムアウト期間内にストリームデータまたは{'timeout': True}を返します。 これは、あなたのプログラムがつぶやきを待つ間に他の処理をしたい場合に便利です。

blockパラメーターは、ストリームを完全に非ブロッキングに設定します。 このモードでは、イテレータは常にすぐに結果を返します。 ストリームデータ、またはNone返します。

timeoutこの引数よりも優先されるので、このモードを使用するにはNoneを設定し、非ブロッキングではCPU使用率を100%にする可能性があることに注意してください。

Twitter Responseオブジェクト

Twitterのリクエストからの応答。 リストや文字列のように動作します(要求されたフォーマットに依存します)が、他にも興味深い属性がいくつかあります。

headersを使用すると、 httplib.HTTPHeadersインスタンスとして応答ヘッダーにアクセスできます。 response.headers.get('h')を使用してヘッダーを取得します。

認証

NoAuth、OAuth、OAuth2の3つの方法でTwitterで認証できます(アプリ専用)。 これらのクラスの使用方法については、 help()してください。

OAuthとOAuth2がおそらく最も便利です。

OAuthの使用

Twitterの開発者ページにアクセスして、新しいアプリケーションを作成します。

https://dev.twitter.com/apps/new

これにより、 CONSUMER_KEYCONSUMER_SECRETが得られます。

ユーザーがアプリケーションを実行するとき、Twitterアカウントでアプリを認証する必要があります。 これを行うには、TwitterへのいくつかのHTTPコールが必要です。 これがどのように行われているかは、 twitter.oauth_danceモジュールを参照してください。 コマンドラインアプリケーションを作成する場合は、 oauth_dance()関数を直接使用できます。

“oauth dance”を実行すると、oauthトークンとoauth secretが取得され、Twitterでユーザーを認証します。 あなたはあとでoauthダンスをやり直す必要がないように、これらを保存する必要があります。

read_token_filewrite_token_fileは、OAuth tokensecret鍵の値を読み書きするユーティリティメソッドです。 値は文字列としてファイルに格納されます。 ひどく刺激的ではない。

最後に、 OAuthオーセンティケータを使用してTwitterに接続できます。 コードでは、すべてこれのようになります:

from twitter import *

MY_TWITTER_CREDS = os.path.expanduser('~/.my_app_credentials')
if not os.path.exists(MY_TWITTER_CREDS):
    oauth_dance("My App Name", CONSUMER_KEY, CONSUMER_SECRET,
                MY_TWITTER_CREDS)

oauth_token, oauth_secret = read_token_file(MY_TWITTER_CREDS)

twitter = Twitter(auth=OAuth(
    oauth_token, oauth_secret, CONSUMER_KEY, CONSUMER_SECRET))

# Now work with Twitter
twitter.statuses.update(status='Hello, world!')

OAuth2

Twitterは特定のAPIエンドポイントに対してOAuth2のアプリケーションのみのフローをサポートしています。 このOAuth2オーセンティケータは、アプリケーションのみのフローのみをサポートしています。

OAuth2で認証するには、Twitterの開発者ページにアクセスして、新しいアプリケーションを作成します。

https://dev.twitter.com/apps/new

これにより、 CONSUMER_KEYCONSUMER_SECRETが得られます。

oauth2_dance関数を使用して、 CONSUMER_KEYおよびCONSUMER_SECRETをベアラトークンと交換します。

最後に、 OAuth2オーセンティケータとベアラトークンを使用してTwitterに接続できます。 コードでは、次のようになります::

twitter = Twitter(auth=OAuth2(bearer_token=BEARER_TOKEN))

# Now work with Twitter
twitter.search.tweets(q='keyword')

ライセンス

PythonのTwitterツールは、MITライセンスの下で公開されています。







-sixohsix

執筆者:

関連記事

関連記事はありませんでした