Pythonで遊んでみる -part3- (Twitterを使ってみる) –

今回は、tweepyなるものを使って、PythonからTwitterを触ってみることにしました!

 

環境

以前の記事で作成した通りの環境です。

  • MacBookAir 2013
  • Intel core i5 1.3GHz
  • python2.X (anaconda-2.1.0)

後々nfcと組み合わせたいとか考えていたので、anaconda-2.Xを利用しました。
(いつになったら、Python3.Xが普通に使える時代が来るのだろうか…。)

tweepy自体はPython2.6, 2.7, 3.3, 3.4に対応してるらしいです。(tweepy | Githubより)

 

必要知識として、TwitterではOAuth認証というものを利用してセキュアな通信をしています。

OAuth認証

OAuth (オー オース[1]) は、ブレイン・クックとクリス・メッシーナが始めたオープンプロトコルであり、デスクトップ、モバイル、WebアプリケーションなどにセキュアなAPI認可 (authorization) の標準的手段を提供する。OAuth | Wikipedia

ほっほげぇぇ。。。あまりしっかり理解できていないです><

 

環境構築
Twitter側

Twitterをいじるためにアプリケーション登録が必要となります。これをすると、Consumer KeyConsumer Secretがもらえて、アプリケーションからTwitterを操作できるようになります。

参考サイト : TwitterAPIで、アプリケーション登録する方法 | Syncer.jp
[http://syncer.jp/twitter-api-create-application]

上記の参考サイトがかなり丁寧に、とてもわかりやすく書いてあったので基本的にこの流れに沿って実行しました。

途中、手間取った作業

  1. 電話番号の登録
    途中、アプリケーションの登録にはアプリケーションの登録に利用するアカウントにたいして電話番号の登録が必要となった。https://support.twitter.com/articles/20172611-
  2. CallbackURL
    アプリケーションのを行う際に必須ではない入力欄。
    とりあえず、CallbackURLは入力しないほうがわかりやすいと思う。

ここ以外に戸惑うともなく、簡単にトークンを取得できました。

 

Python側

PythonからTwitterを使うモジュール (tweepy | Github) 公式サイト(http://www.tweepy.org/)

githubからcloneしてきてインストール。

git clone https:/github.com/tweepy/tweepy.git
python tweepy/setup.py install

インストールした時点で、tweepyのバージョンは3.3.0でした。
ここで、謎のASCI_LOGO.txtなるファイルを発見。

cat ASCII_LOGO.txt
# 内容は自分で確認してください♪ こーゆーの結構好きだったりする。

こちらも、無事に問題なくインストールできました。

 

hello World

とりあえず、Hello Worldツイートまでやってみたいと思います。

認証情報の取得

Twitterのアプリケーションを管理するページ(https://apps.twitter.com/)で利用するアプリケーションをクリック。Key and Access TokensのタブでConsumer Key(API Key)とConsumer Secret(API Secret)をコピーしてきます。

キーのコピー

取得してきたKeyとSecretを下記のソースコードに入力して実行してください。(ソースコードは” PythonでTwitterを使う  〜Tweepyの紹介〜| kivantium活動記録“様から引用させていただきました。)

get_token.py

# -*- coding: utf-8 -*-

import tweepy

consumer_key = "8odkT9********"
consumer_secret = "8Q97IH******************"

# ***は自分で取得したものに置き換えてください。
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
print "Access:", auth.get_authorization_url()
verifier = raw_input('Verifier:')
auth.get_access_token(verifier)

print "Access Token:", auth.access_token
print "Access Token Secret:", auth.access_token_secret

実行〜

python get_token.py
--> Access: https://api.twitter.com/oauth/authorize?oauth_token=XyjNeXPlTroHMeoPH7RilcdMXSktU3JO
# 上記のURLをコピーしてブラウザで開く
スクリーンショット 2015-05-05 17.12.30

URLを開いた際の画面
連携アプリを認証 をクリックする

スクリーンショット 2015-05-05 17.12.38

発行されたPINコード
ターミナルに戻って、Verifire: に入力する

この時に先ほどのCallbackURLを設定していると、ブラウザに数字が表示されません。

--> Verifier:ブラウザ上で表示された7桁?のPINコードを入力
--> Access Token: (アカウントに対するアクセストークンが出力される)
--> Access Token Secret: (アカウントに対するアクセストークンSecretが出力される)

こここで表示されたAcess TokenとAccess Token Secretを次のプログラムで利用します。

 

ツイートしてみる。

それでは、認証情報を使ってツイートしてみたいと思います。


#-*- coding: utf-8 -*-

import tweepy

# 認証に用いる情報
consumer_key = "8odk*****"
consumer_secret = "8Q97I**********"
access_token = "2173*******" # さきほどのプログラムで取得したやつ
access_secret = "SfjbP*********" # さきほどのプログラムで取得したやつ2

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)

# ↓この記述だとTweepy3.3ではエラーだった。
# api.update_status("Hello World")
# ↓正しい記述
api.update_status(status="Hello World")

さて、これで実行してみると…


python post_hello.py

  無事に…ツイートすることができました。。。やった♪  

 

おまけ(nfcpyとtweepyを使ってみた)

最近、pythonからnfcpyをつかって、NFCを利用するってやってみました。(Pythonで遊んでみる -part2- (NFCを使ってみる)) これを利用して、自分のSuicaをかざしたら「入室しました」ってツイートされるプログラムを作ってみました。


#-*- coding: utf-8 -*-
# Suicaをかざしたら、入室をツイートする

import tweepy
import nfc
import datetime, locale

def connected(tag):
  print("connected tag")
  print(tag)

twitter_oauth = {
  "consumer_key":"8odk******",
  "consumer_secret":"8Q97***********",
  "access_token":"2173**********",
  "access_secret":"Sfjb*********"
}

# IDmとユーザ名の対応
user_data = {
  "01010*****" : "takunoko",
  "01100******" : "takunoko2"
}

# 時刻取得
d = datetime.datetime.today()
time_data = str(d.month)+"月"+str(d.day)+"日/"+str(d.hour)+"時"+str(d.minute)+"分"

# Twitter認証情報
auth = tweepy.OAuthHandler( twitter_oauth["consumer_key"], twitter_oauth["consumer_secret"])
auth.set_access_token( twitter_oauth["access_token"], twitter_oauth["access_secret"])
api = tweepy.API(auth)

# usbのNFCポート作成?
clf = nfc.ContactlessFrontend('usb')

# カード待ち
print("wait card")
tag_data = clf.connect(rdwr={'on-connect': connected})

# カードのIDm情報を取得
# (カードの種類がType3Tagであることを前提に)
card_idm = str(tag_data.idm).encode("hex")
print("IDm : %s" % card_idm)

clf.close()

# 事前に登録されている情報と一致したら、ツイート
if ( card_idm in user_data):
  post_str = user_data[card_idm]+"は"+time_data+"に入室しました。\n#nfchkin"
  api.update_status(status=post_str)
  print(post_str)
else:
  print("登録されていないカードです。")

実行結果は、こんな感じです。

とてもPython初心者なので、書き方が汚いと思うのですが…無事にツイートできています♪
ただ、すべての情報がソースコードにかかれていたり、あまり実用的じゃないです…。DBとか使ったりGUI化したりすると使いやすくなるのかな…。とりあえず、お遊びなんで許してください。

 

まとめ

今回は、PythonからTwitterを使ってみました。通信とか認証とかでもっと面倒だったり、苦戦したりするのかと思ったら、tweepyが優秀なのか思っていたよりもすんなり動いてくれました。このへんが、Pythonの強みなのかなぁとかおもったり…。

やっぱり、Python楽しいですね♪
✌(‘ω’✌ )三✌(‘ω’)✌三( ✌’ω’)✌
最後まで読んでいただきありがとうございました!
次回の記事にもご期待ください♪

One thought on “Pythonで遊んでみる -part3- (Twitterを使ってみる) –

  1. Pingback: 2015年にやりたい100の事 -達成度- | たくのこ Web

コメントを残す

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

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