Python
TwitterAPI
TouchDesigner

TouchDesignerからTwitterAPIを叩く

TouchDesignerではPythonを書けるので簡単に色々できます。
今回はTwitterのAPIを使っていきたいと思います。

ライブラリ

requests-oauthlibというOAuth認証ライブラリを使っていきたいと思います。
requests-oauth使うのに必要なライブラリ

(tweepyなどTwitter用のライブラリもありますが、今後他のAPIも使うことも考えての選択です)

このようにtoeファイルと同じ階層にpylibというフォルダを作りそこにrequests-oauthlib, requests, oauthlibを入れます。
一応ライブラリ置いておきます。
今回はPCにライブラリを入れないやり方でいきたいと思います。

import sys
mypath = project.folder + '/pylib/'

if mypath not in sys.path:
    sys.path.append(mypath)

このスクリプトを実行することでpylibにパスが通ります。
ただし一度終了してしまうとパスは外れてしまうので、ExecuteDATのonStartメソッド内にこのスクリプトを書くことで起動時に自動で実行されます。

Twitterアプリケーションの作成

https://apps.twitter.com Create New Appでアプリケーションを作成します。

  • Name(アプリ名)
  • Description(アプリ説明)
  • Website(自分のサイトのURL等)
  • Callback URL (空欄で大丈夫です)

作成できるとConsumer Key (API Key)とConsumer Secret (API Secret)が確認できます。
PermissionsタブのAccessをRead and Writeに設定します。
Keys and Access TokensタブでCreate my access tokenからAccess TokenとAccess Token Secretを作成し確認します。

Tweetを投稿する

tweet
from requests_oauthlib import OAuth1Session

ApiKey = "自分のConsumer Key (API Key)"
ApiSecret = "自分のConsumer Secret (API Secret)"
AccessToken = "自分のAccess Token"
AccessTokenSecret = "自分のAccess Token Secret"

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

params = {"status": "Hello World!"}

twitter = OAuth1Session(ApiKey, ApiSecret, AccessToken, AccessTokenSecret)

twitter.post(url, params = params)

これだけでツイッター民に Hello World! ができました。
画像付きの投稿の仕方は気が向いたら書きます。

Tweetを取得する

search
from requests_oauthlib import OAuth1Session
import json

ApiKey = "自分のConsumer Key (API Key)"
ApiSecret = "自分のConsumer Secret (API Secret)"
AccessToken = "自分のAccess Token"
AccessTokenSecret = "自分のAccess Token Secret"

keyword = "TouchDesigner"

url = "https://api.twitter.com/1.1/search/tweets.json?q=" + keyword

params = {}

twitter = OAuth1Session(CK, CS, AT, AS)
req = twitter.get(url, params = params)

if req.status_code == 200: #エラー処理
    timeline = json.loads(req.text)
    for tweet in timeline["statuses"]:
        if ("media" in tweet["entities"]):
            print("MediaUrl: " + tweet["entities"]["media"][0]["media_url"])

        print("\n")
        print("text:" + tweet["text"])

TouchDesignerと検索し、画像があるツイートならそのurlとツイートの本文を取得するスクリプトです。
.get()によってjsonが返ってきます。かなり色々な情報が格納されているため画像のurlを探すのも一苦労でした。
公式リファレンスでたくさんのAPIの使い方が見れます。
(フォローを外すのがfriendship/destroyってのが面白い)

https://twitter.com/joespyair/status/955416409273597952