まぁ大した記事なんて書いてないわけだけど、それでも、せっかく書いたものを腐らせておくのは勿体無いなぁと思った次第。
だらだら書いて丸一日かけてしまったけど、やってることは特に難しくない。
実行フロー:
- はてなブログAPIを使って、最新記事10件の情報(タイトル、URL、その他)を取得する(はてなブログAtomPub - Hatena Developer Center)
- 最新記事10件の中から1件を無作為に選択する
- 選択した記事のURLをtwitterに投稿する(Twitter API | Products | Twitter Developer Platform)
これをAWS lambdaにセットし、毎朝9:00に実行するというもの。
せっかくなのでソースコードを公開しておきます。
python50行弱で書けたので、興味のある人はやってみるとよいと思う(記事最下部参照)。
いやー、年末年始休暇の工作としてはちょうどいい感じだったな。
ちょっとした達成感が得られてよかった。
import requests import xml.etree.ElementTree as ET import random import tweepy import datetime def tweet_random_post_title_and_link(tweet_message): # 認証に必要なキーとトークン API_KEY = 'XXXXXXXXXXXXXX' API_SECRET = 'XXXXXXXXXXXXXX' ACCESS_TOKEN = 'XXXXXXXXXXXXXX' ACCESS_TOKEN_SECRET = 'XXXXXXXXXXXXXX' auth = tweepy.OAuthHandler(API_KEY, API_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) api = tweepy.API(auth) api.update_status(tweet_message) def get_random_post_title_and_link(): url = "https://blog.hatena.ne.jp/katsu-ichiro/better-software-testing.hatenablog.com/atom/entry" payload={} headers = { 'Authorization': 'Basic XXXXXXXXXXXXXX', 'Cookie': 'b=XXXXXXXXXXXXXX; sk=XXXXXXXXXXXXXX' } response = requests.request("GET", url, headers=headers, data=payload) root = ET.fromstring(response.text) index = random.randint(0,9) entry = root.findall("{http://www.w3.org/2005/Atom}entry")[index] link = entry.findall("{http://www.w3.org/2005/Atom}link")[1].attrib['href'] title = entry.find("{http://www.w3.org/2005/Atom}title").text post_info_dict = { "title": title, "link": link } return post_info_dict post_info_dict = get_random_post_title_and_link() print(post_info_dict["title"] + " : " + post_info_dict["link"]) today = datetime.date.today() tweet_random_post_title_and_link(today.strftime('%Y年%m月%d日') + "のおすすめ" + post_info_dict["link"])