PythonとAWSでツイッターの名前に「~日目」の日数カウンタをつける方法
将棋ソフト「ポナンザ」を作った山本一成さんというプログラマーが、以前こんなものを作っていて、自分も似たようなものを作ろうと思い作った。
AWS lambdaとTwitterAPIを使えば比較的簡単に作れるのだが、正直ツイッターのAPI取得やらなんやらで苦労した。
本当はOAuth認証を使い、認証されたユーザーの名前を取得して日数カウンタを付けたかったのだが、それをやろうとするとDynamoDBを使ってユーザー情報をやり取りしなくてはいけないらしい。
結構しんどそうなので、今回はめっちゃシンプルなモノをさっさと作りたかったのである。
というわけで一応雑なコードだが、動いているので公開する。
全コードはこちら
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import datetime
from requests_oauthlib import OAuth1Session
# OAuth認証部分
CK = "Consumer Key を入力"
CS = "Consumer Secret を入力"
AK = 'Access Key'
AS = 'Access token Seecret'
twitter = OAuth1Session(CK, CS, AK, AS)
def lambda_handler(event, context):
# Twitter Endpoint(検索結果を取得する)
get_url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
req_get = twitter.get(get_url)
account_data = json.loads(req_get.text)
str_name = account_data['name']
start_day = datetime.datetime(2020, 2, 16)
today_day = datetime.datetime.today()
diff_day = today_day - start_day
daycount = diff_day.days + 1
str_daycount = str(daycount) + '日目'
post_url = 'https://api.twitter.com/1.1/account/update_profile.json'
user_name = re.sub(r"【.*】", "", str_name) + "【" + str_daycount + "】"
params = {'name': user_name}
req_post = twitter.post(post_url, params=params)
# respons check.
if req_post.status_code == 200:
return "ok 200."
else:
return "ERROR : " + str(req_post.status_code)
import json
import datetime
from requests_oauthlib import OAuth1Session
ライブラリを読み込む。
twitterAPIをイジるモジュールはたくさんあるが、違いは俺もよく分かっていない。
# OAuth認証部分
CK = "Consumer Key を入力"
CS = "Consumer Secret を入力"
AK = 'Access Key'
AS = 'Access token Seecret'
twitter = OAuth1Session(CK, CS, AK, AS)
TwitterAPIのキーをそれぞれ入力。
キーをOAuth1sessionというモジュール?で通す。
さらっと書いてるが、たぶん本当の初心者は分からないだろう。
各自ググってほしい。
def lambda_handler(event, context):
get_url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
名前を取得するためのURL。
この辺のURLとかパラメーターはリファレンスを見て探す。
req_get = twitter.get(get_url)
account_data = json.loads(req_get.text)
str_name = account_data['name']
start_day = datetime.datetime(2020, 2, 16)
today = datetime.datetime.today()
diff_day = today - start_day
daycount = diff_day.days + 1
str_daycount = str(daycount) + '日目'
取得用URLからデータを取得。
jsonデータなので、jsonメソッド?で読み込む。
データから「name」を取り出す。
任意の日付をdatetime型に変換する。
今日の日付を取得。
経過日数 = 開始日 - 今日
例えば、その日なら0日になってしまうので、1を足す。
post_url = 'https://api.twitter.com/1.1/account/update_profile.json'
user_name = re.sub(r"【.*】", "", str_name) + "【" + str_daycount + "】"
params = {'name': user_name}
req_post = twitter.post(post_url, params=params)
プロフィール更新用のURL。
ユーザーネームから正規表現で【~日目】を削除して、経過日数を付加する。
そして、postする。
# respons check.
if req_post.status_code == 200:
return "ok 200."
else:
return "ERROR : " + str(req_post.status_code)
エラーチェックのためのコードらしいが、俺もよく分かっていない。
これをどうすんの?
AWS lambdaに乗せる。
他のサイトを色々見て各自でやってほしい。
以上。
おまけ
近いうちにOAuth認証ユーザーの名前を取得して、誰でもすぐにカウンタを付けられるようにしたい!
俺ならできる(素敵な勘違い)
ここまでお読みいただきありがとうございます。 良かったらスキとシェアをお願いします。