休日でみんなもゴロゴロしてるのに 君はずいぶん忙しい顔をしてるネ
そうだいつかのあの場所へ行こう
ゆず「夏色」
はじめに
今回はTwitter APIをJuliaで利用します.Twitter.jl が存在しているみたいですが勉強を兼ねているのであえて使用しません.
また,Twitter APIを使用するための登録に関しての説明も省略します.
TwitterのAPIには以下の3種類が存在しているみたいです.
(間違えていたらすみません)
・Twitter API OAuth1.0
・Twitter API OAuth1.0a
・Twitter API OAuth2.0
今回はOAuth2.0を使用します.まだ,OAuth2.0は新しくて,できないことが多いため,結局,OAuth1.0aを使用することが多いのですが,あえて2.0に関して書きます.
OAuth1.0a に関しても作成できているので,そのうち書きたいたいと思います.
(こちらの方が需要が大きい気がします)
実際のプログラム
以下、実際に指定したユーザーのタイムラインを取得するプログラムです.
最新の5件を取得して,Tweet IDと内容を表示しています.
using Pkg
# 必要なパッケージのインストール
Pkg.add("HTTP")
Pkg.add("JSON")
using HTTP
using JSON
const USER_ID = "*** 自身のTwitter User id ***"
const BEARE_TOKEN = "*** Twitter 管理画面から取得 BEARE_TOKEN ***"
# max_resultで取得するツイート数を指定(MAXで200)
req = HTTP.request("GET", "https://api.twitter.com/2/users/$USER_ID/tweets?max_results=5", ["authorization" => "Bearer $BEARE_TOKEN"])
# responseの値を取得 バイナリ形式
x = req.body
# 文字列変換
x_str = String(x)
# JSON形式
x_str_json = JSON.parse(x_str)
for i in 1:length(x_str_json["data"])
println("-----")
println(x_str_json["data"][i]["id"])
println(x_str_json["data"][i]["text"])
end
余談…
バイナリ形式から文字列形式に変換した際に元の変数は空になるようです.
言い換えると,文字列形式に変換した際に,他の変数に値を格納しておかないと改めて値を取得する必要が出てきます.これにめちゃくちゃハマりました.
(変数を上書きしたわけでもなく,変数の値が変わってしまうのは普通なんでしょうか?)
$ # 例)
$ println(JSON.parse(String(req.body)))
$ println(req.body) > UInt8[]
補足:認証に関して
BEARE TOKENに関してはTwitter APIの管理画面から取得できるのですがCONSUMER KEYとCONSUMER SECRETを使用して取得することができます.流れとしては,
- CONSUMER KEYとCONSUMER SECRETからBEARE TOKEN CREDENTIALS 生
- 1.で生成したBEARE TOKEN CREDENTIALSを使用してBEARE TOKENを作成
const CONSUMER_KEY = "***Twitter API 管理画面から取得****"
const CONSUMER_SECRET = "***Twitter API 管理画面から取得****"
# CONSUMER_KEYとCONSUMER_SECRETを":"で結合し、ベース64でエンコード
const BEARE_TOKEN_CREDENTIALS = Base64.base64encode("$CONSUMER_KEY:$CONSUMER_SECRET")
# ヘッダーの作成
header = Dict("Content-Type" => "application/x-www-form-urlencoded;charset=UTF-8"
, "Authorization" => "Basic $BEARE_TOKEN_CREDENTIALS")
# POSTでBEARE TOKENを取得
HTTP.request("POST", "https://api.twitter.com/oauth2/token"
, header
, "grant_type=client_credentials"
)
beare_str = String(req.body)
beare_str_json = JSON.parse(beare_str)
# BEARE TOKENを取得
println(beare_str_json["access_token"])
終わりに
Juliaでプログラミングをするように気づいたのですが,Juliaは圧倒的にドキュメントが少ないです.また,ドキュメント少ないせいかすごく難しく感じてしまい,プログラミング初心者が導入するのはかなり厳しいかなと思います.今後も自分の学習,初心者の方の導入のためにこだわった記述よりも一先ず動くシンプルな記述を意識してきたいと思います.
(僕もJuliaの発展貢献度日本ランキング50,000位以内くらいには入れていますかね)
何か,リクエスト(リアクション)いただけたら嬉ションです.
今年の夏はどんな夏になるかな.
よろしければ↓
このサイトに関して