twitterを通してAPIの勉強をする

python-twitter-api

ネコ

APIの勉強しないとな…マジで。
理解する必要性は分かっているけど、重たい腰がなかなか上がらない()
APIの良い書籍って聞いたことないし、正直どうやって勉強して良いか分からないよね()

Medi

ネコ

このままだと本当にAPIの勉強しないので、TwitterのAPIからトライしてみよう()
はじめの一歩を踏み出すのが何事も1番ツライから。
がんばろう()

Medi

TwitterのAPIに限らないと思うけど、APIを利用するにはいくつかのステップを徐々に理解していく必要があります。

  • STEP.1
    APIキーとシークレットを取得
    メールアドレスとパスワードみたいなものと理解すれば大丈夫です。
    アプリをAPIサイトに登録した時に貰えます。
    登録する内容は「アプリ名/アプリケーションのドメイン(URL)/どのURLへ返答すればよいか(コールバックと呼ばれる)」であることが多いです。
  • STEP.2
    APIの認証方式を理解する
    ネットワークやセキュリティ系って勉強しづらいですよね()
  • STEP.3
    各プログラミングでの認証のやり方を勉強する
    認証方式を理解して、各プログラミングでのやり方を理解する必要があります。
  • STEP.4
    API-Referanceの中身を理解する
    JSON形式が多いみたいですが、慣れてないと理解するのが大変です。自分もこの部分が嫌で避けまくってました()
  • STEP.5
    実装してみる!
    ドキュメントを読んで実際にプログラムを書いていきます。

OAuth認証を理解する

OAuth認証が何なのかをざっと理解しましょう。
参考にした記事はコチラ。
参考 一番分かりやすいOAuthの説明Qiita

次に、PythonでのOAuth認証のやりかたを学習します。

参考 PythonでTwitterAPIを利用していろいろ遊んでみるQiita

TwitterAPIの利用とセットで学習できます。

今回はこの記事を参考にしてプログラムを書いてみました。

TwitterAPIのリファレンスを見てみる

ネコ

この作業が1番ダルい…()
参考 API-DocsTwitter 全部英語だけど、がんばって理解していきましょう()

重要そうな概要部分を抜き出してみます。

The API aims to be a RESTful resource

With the exception of the Streaming API, the Twitter API endpoints attempt to conform to the design principles of Representational State Transfer (REST). Twitter APIs use the JSON data format for responses (and in some cases, for requests).

→APIの形式はREST-APIで、JSON形式のデータであることが分かります

There are limits to how many calls and changes can can be made in a day

API usage is rate limited, with additional account-based fair use limits on write/create/delete endpoints, to protect Twitter from abuse.

→APIの使用制限が存在していることが明記されています
15 Minute Windows
Rate limits are divided into 15 minute intervals. All endpoints require authentication, so there is no concept of unauthenticated calls and rate limits.

→15分間隔で制限時間を区切っていることが分かります

HTTP Headers and Response Codes
Use the HTTP headers in order to understand where the application is at for a given rate limit, on the method that was just utilized.Note that the HTTP headers are contextual. When using app-only auth, they indicate the rate limit for the application context. When using user-based auth, they indicate the rate limit for that user-application context.

  • x-rate-limit-limit: the rate limit ceiling for that given endpoint
  • x-rate-limit-remaining: the number of requests left for the 15 minute window
  • x-rate-limit-reset: the remaining window before the rate limit resets, in UTC epoch seconds

When an application exceeds the rate limit for a given standard API endpoint, the API will return a HTTP 429 “Too Many Requests” response code, and the following error will be returned in the response body:

 { "errors": [ { "code": 88, "message": "Rate limit exceeded" } ] } 

 

To better predict the rate limits available, consider periodically using GET application/rate_limit_status. Like the rate limiting HTTP headers, this resource’s response will indicate the rate limit status for the calling context — when using app-only auth, the limits will pertain to that auth context. When using user-based auth, the limits will pertain to the application-user context.

→リミットかどうかを判断するために、HTTPヘッダーを使用することができます。制限を超えた場合には、APIは”Too Many Requests”を意味する429のステータスコードを返してくれることが分かります。

今度はTweet-objectsの記事を見ていきます。

Tweet-objectsがツイートの中身の部分です。

Tweet Object
Tweets are the basic atomic building block of all things Twitter. Tweets are also known as “status updates.” The Tweet object has a long list of ‘root-level’ attributes, including fundamental attributes such as id, created_at, and text. Tweet objects are also the ‘parent’ object to several child objects. Tweet child objects include user, entities, and extended_entities. Tweets that are geo-tagged will have a place child object.

When the following Tweet is rendered in JSON:

The JSON will be a mix of ‘root-level’ attributes (here we are highlighting some of the most fundamental attributes), and child objects (which are represented here with the {} notation):

{
 "created_at":"Thu Apr 06 15:24:15 +0000 2017",
 "id": 850006245121695744,
 "id_str": "850006245121695744",
 "text": "1/ Today we’re sharing our vision for the future of the Twitter API platform!nhttps://t.co/XweGngmxlP",
 "user": {},  
 "entities": {}
}
→ルートレベルの属性と子属性の2種類で構成されていることが分かります。例えば、"user"という属性にはさらにたくさんの属性が入っています。

{
  "user": {
    "id": 2244994945,
    "id_str": "2244994945",
    "name": "TwitterDev",
    "screen_name": "TwitterDev",
    "location": "Internet",
    "url": "https://dev.twitter.com/",
    "description": "Your source for Twitter news",
    "verified": true,
    "followers_count": 477684,
    "friends_count": 1524,
    "listed_count": 1184,
    "favourites_count": 2151,
    "statuses_count": 3121,
    "created_at": "Sat Dec 14 04:35:55 +0000 2013",
    "utc_offset": null,
    "time_zone": null,
    "geo_enabled": true,
    "lang": "en",
    "profile_image_url_https": "https://pbs.twimg.com/"
  }
}

FAQ

When are links wrapped with t.co? Do I need to make an extra API call?
Links will be wrapped when Twitter receives a Tweet using Post statuses/updates or a direct message using POST direct_messages/new. The wrapped link will be contained in the response to a successful request. There is no need to make any extra API calls.
→長いリンクを載っけても自動的にラップされるみたいです。

リファレンスに目を通したので、実際にプログラムを書いていきます。

Pythonのプログラムを書いていく

まずアクセストークンなどをまとめたファイルを作成します。
tw_config.pyとして作成しました。

CONSUMER_KEY = "**************"
CONSUMER_SECRET = "**************"
ACCESS_TOKEN = "**************"
ACCESS_TOKEN_SECRET = "**************"

次に、ツイートするpythonファイルを作成します。
参考にした記事と同じpostTweet.pyとします。

import json,tw_config
from requests_oauthlib import OAuth1Session

CK = tw_config.CONSUMER_KEY
CS = tw_config.CONSUMER_SECRET
AT = tw_config.ACCESS_TOKEN
ATS = tw_config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK,CS,AT,ATS)

url = "https://api.twitter.com/1.1/statuses/update.json"

print("内容を入力してください")
tweet = input(">> ")
print("="*15)

params = {"status": tweet}

res = twitter.post(url, params = params)

if res.status_code == 200:
   print("Naild it")
else:
   print("Failed: {}".format(res.status_code))

実際の動画

Python-twitter-api-POSTtweet from python

ちゃんとツイートできています。

オンライン授業でRやPythonの勉強がしたい方はUdemyかTechAcademyがオススメ

Udemyというオンライン授業サイトには、RやPythonが勉強できるオンライン授業がたくさんあります。

書籍でプログラミングの勉強は初学者には大変ですので、映像授業でまず始めてみるのが良いと思います。

 

自分は、UdemyでRとPythonの授業を受けています。

Udemyのような単純なオンライン学習サイトでは勉強が継続できない方にはTechAcademyなどがあります。

テックアカデミーの1番の特徴は「パーソナルメンター制度」

本当にPCやIT系に疎い方であるなら、コチラの方が良いのかもしれません。

TechAcademy

継続できるように個別に目標設定してくれたり、学習の進捗に合わせた宿題があるみたいです。

 

これからPythonでTwitterAPIの勉強する方は、ぜひ参考にしてみてください。
終わり。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください