Quantcast
Channel: okahiro | Okahiro's Gadget Lab
Viewing all articles
Browse latest Browse all 40

ラズパイから自動で画像付きツイートをしてみた。

$
0
0

robin-1150294_1280

今回はRaspberry Pi(以下、ラズパイ)から自動的に画像付きのツイートをTwitterへ行ってみようと思います。ツイートの内容は、このブログの最新記事のタイトルとURLとサムネイル画像とします。

主に以下のサイトを参考にさせていただきました。ありがとうございます。

http://qiita.com/konojunya/items/59a68d35e44db8b87186

http://stackoverflow.com/questions/24300891/add-multiple-images-to-a-tweet-with-python-and-twitterapi

http://www.cafe-gentle.jp/challenge/tips/python_tips_001.html

https://torina.top/main/161/

まずは、TwitterのWebサイトにてアプリケーションを有効にする必要があります。このあたりは上記サイトの一番上のサイトさまに詳しく書かれています。そこで取得したコンシューマーキーなどを、settings.pyなどのファイル名で以下のように記載します。

CONSUMER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxx"
CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ACCESS_TOKEN = "xxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ACCESS_TOKEN_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

そして本体のコードです。上記のスクリプトファイルと同じディレクトリに保存してください。なお、21〜28行目あたりはこのブログサイト用に設定していますので、各自で書き換える必要があります。

#!/usr/bin/python
#coding: UTF-8
import os
import datetime
import settings
import lxml.html
import requests
from TwitterAPI import TwitterAPI

#Move to script file directory.
file_dir = os.path.abspath(os.path.dirname(__file__))
os.chdir(file_dir)

#Print current date and time.
d = datetime.datetime.today()
print('Datetime:', d)

#Read settings.py file.
api = TwitterAPI(settings.CONSUMER_KEY, settings.CONSUMER_SECRET, settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET)

#Parse my blog site. Get the latest article's title and URLs.
target_url = 'http://www.okahiro.info/gd/'
target_html = requests.get(target_url).text
root = lxml.html.fromstring(target_html)
anchors = root.xpath('//a')
msg = anchors[6].text + anchors[6].attrib['href']
images = root.xpath('//img')
img_url = images[0].attrib['src']

#Download image.
def download(url):
    global file_name
    file_name = url.split("/")[-1]
    res = requests.get(url, stream = True)
    if res.status_code == 200:
        with open(file_name, 'wb') as file:
            for chunk in res.iter_content(chunk_size = 1024):
                file.write(chunk)

download(img_url)

#Upload image.
IMAGE_PATH =  file_dir + "/" + file_name
file = open(IMAGE_PATH, 'rb')
data = file.read()
r = api.request('media/upload', None, {'media' : data})
print('UPLOAD MEDIA SUCCESS' if r.status_code == 200 else 'UPLOAD MEDIA FAILURE')

#Remove uploaded local image file.
os.remove(IMAGE_PATH)

#Post tweet with a reference to uploaded image.
if r.status_code == 200:
    media_id = r.json()['media_id']
    r = api.request('statuses/update', {'status':msg, 'media_ids':media_id})
    print('UPDATE STATUS SUCCESS' if r.status_code == 200 else 'UPDATE STATUS FAILURE')

importしているモジュールが無い場合はpipやapt-getなどでインストールしてください。なおTwitterAPIについては一度インストールした後以下のようにアップグレードが必要だと思います。

pip install TwitterAPI --upgrade

このスクリプトを実行すると下の画像のように写真付きのツイートをラズパイがしてくれます。(3連投になっちゃってますが、これは3回スクリプトを走らせた結果です…。)

img_1510

毎回手動でスクリプトを走らせるのも面倒なので、crontabで自動的に実行させましょう。

まずはインストール。

sudo apt-get install gnome-schedule

インストールは結構時間がかかりました。それで、

crontab -e

としてcronのファイルを設定します。以下のように行を追加して保存します。この設定ですと毎日午前0時0分に自動投稿されます。

0 0 * * * /usr/bin/python /home/pi/auto_tweet/auto_tweet.py >> log.txt 2>&1

なお、log.txtというファイルに標準出力を書き出して、ログファイルとしています。

スクリプトファイルの実行権限も変更することをお忘れなく。

sudo chmod 755 <ファイル名>

初めは写真付きは難しいかなと思っていたのですが、案外簡単に行けました。これも上記の数々のサイト様のおかげなのですが。

今日のところはこの辺で。☕️


Viewing all articles
Browse latest Browse all 40

Trending Articles