いよいよ今回ロジック部分を作ります!これでツイート機能のついた(ツイート機能しかない)クライアントが完成します!
Twitterのconsumer keyと consumer secretを取得
TwitterのAPIを使用するために必要なキーを取得する手順 - Hello API
この記事がわかりやすいです。今回access tokenと access token secretは不要(ツイッタークライアントなのでそりゃそうです)なので、1~4を行ってください。
ここで一つ注意があります。今回、Pythonでクライアントを作るのでPINコード認証が必要です。しかし、Callback URLが書いてあるとPINコード画面ではなく、そのURLへと飛ばされてしまいます。だから、Callback URLはからのままにしておいてください。
Callback URLは空にしておいてください
ログインしてみる
では実際にPINコードでログインしてみます。
import sys from PyQt5 import QtCore from PyQt5.QtWidgets import * if __name__ == '__main__': app = QApplication(sys.argv) import webbrowser import tweepy CONSUMER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxx" # 先ほどのconsumer key CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 先ほどのconsumer secret auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) redirect_url = auth.get_authorization_url() webbrowser.open(redirect_url) # 認証画面を表示する verifier, ok = QInputDialog.getText(None, 'PIN code', 'input pin code') # PINコード入力用ダイアログ verifier = verifier.strip() auth.get_access_token(verifier) ACCESS_TOKEN = auth.access_token ACCESS_SECRET = auth.access_token_secret auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET) api = tweepy.API(auth) sys.exit(app.exec_())
実行するとダイアログが出て、ブラウザが開き、認証画面が出るはずです。出ましたか?
これでログイン部分はできました。
ツイートしてみる
先ほどのapiを使ってツイートしてみましょう。
api = tweepy.API(auth) try: req = api.update_status('ツイッタークライアントのテスト') except Exception as e: print(e)
ツイッターをみて、ツイートできていたら成功です。
前回のコードと組み合わせる準備
前回のコードと組み合わせてる前に、前回説明してなかった部分を説明しておきます。
ボタンにイベントリスナをつける
ボタンにイベントを貼り付ける方法です。といっても難しくはないです。
button.clicked.connect(func)
テキストボックスからテキストを取得
これも説明してませんでした。
textbox.toPlainText()
前回のコードと組み合わせる
いよいよ(簡単なものではありますが)ツイッタークライアントの完成です!
import sys from PyQt5 import QtCore from PyQt5.QtWidgets import * import webbrowser import tweepy class TweetWindow(QWidget): def __init__(self, parent = None): super(TweetWindow, self).__init__(parent) self.initLayout() self.initTwitterAccount() def initLayout(self): textbox = QPlainTextEdit() button = QPushButton() button.setText('tweet') button.clicked.connect(lambda: self.tweet(textbox.toPlainText())) # ボタンをクリックしたら、テキストボックスの内容を使ってツイートする layout = QVBoxLayout() layout.addWidget(textbox) layout.addWidget(button) self.setLayout(layout) def initTwitterAccount(self): CONSUMER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxx" # 先ほどのconsumer key CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 先ほどのconsumer secret auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) redirect_url = auth.get_authorization_url() webbrowser.open(redirect_url) # 認証画面を表示する verifier, ok = QInputDialog.getText(None, 'PIN code', 'input pin code') # PINコード入力用ダイアログ verifier = verifier.strip() auth.get_access_token(verifier) ACCESS_TOKEN = auth.access_token ACCESS_SECRET = auth.access_token_secret auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET) self.api = tweepy.API(auth) def tweet(self, text): try: req = self.api.update_status(text) except Exception as e: print(e) if __name__ == '__main__': app = QApplication(sys.argv) window = TweetWindow() window.show() sys.exit(app.exec_())
どうですか?動きましたか?
次回予告
次回は「起動するたびに認証する」という手間から解放する作業です。たぶん次の次からタイムラインの表示に取り掛かります。