Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@yynsmk

Pythonで自動ツイートをするスクリプト作ってみた

はじめに

最近、エンジニアを目指すインターン生たちのQiitaへのアウトプットをTwiiterを通して外部の人にもぜひ見てもらいたいと思いました。
ただ、手動でURLをツイートするのは非常に面倒だと思ったので、自動ツイートするスクリプトを組んでみました。
正直初めの、アカウント申請が一番面倒だった。笑

自動ツイートスクリプト作成手順

developer accountを作成する

以下のサイトを参考にさせてもらいました。

まず初めに、TwitterのAPIを利用するには開発者用のアカウントを申請しなければならないらしい。
基本的に、選択形式でどんどん質問に答えて進めていくが、最後に「作成するアプリケーションについて300語以上で説明する」必要がありました。
以下は今回の申請用に作った当たり障りのない文章です。どうぞご自由にお使いください!

I will make a Twitter Bot. The purpose is for me to study the programming using Twitter's APIs. I don't intend to analyze Tweets, Twitter users, or their content. I only want to learn the web programming. My Twitter Bot will inform my followers regularly about my and my friends blogs and some programming techniques. I would like to exchange useful information on programming with many people through this account's tweets.

現在の仕様に変わった時(8月頃)は、申請には時間がかかる的な話を聞いていたが、12月時点では速攻(1、2分くらい)で申請が通りました。

新規のアプリを作成する

以下のサイトを参考にさせてもらいました。
初心者向け!PythonでTwitterに自動ツイートするプログラムを作る方法

申請が通れば、https://developer.twitter.com/en/apps/ から新規でアプリを作成します。
ホーム画面から、「Create New App」をクリックして、必要な情報を登録します。
登録できたら、「Keys and tokens」欄に行って、以下の情報をメモっておきましょう。

  • API key
  • API secret key
  • Access token
  • Access token secret

これで実装に必要な準備が整ったので、後はガリガリと実装を進めていくのみですね。

実装

いよいよ実装に取り掛かります。
今回に限った話ではないですが、ローカル環境を汚したくないので、仮想環境を用意して必要なライブラリをインストールします。

$ mkdir Bot
$ python3 -m venv venv
$ source venv/bin/activate
$ pip --version
$ pip install --upgrade pip
$ pip install twitter
$ pip install python-dotenv

ここから、いくつかファイルを作っていきます。
まずは、先程メモっておいた認証情報を.envに記述します。

TW_CONSUMER_KEY=''
TW_CONSUMER_SECRET=''
TW_TOKEN=''
TW_TOKEN_SECRET=''

続いて、config.pyを作成します。
load_dotenv(find_dotenv())で先程作成した.envファイルを読み込んでいるのが分かるでしょう。
.envに記述した内容を直接config.pyに記述しても良かったのですが、GitHubにソースを公開したかったので、ファイルを分けました。

config.py
import os
from dotenv import find_dotenv, load_dotenv

load_dotenv(find_dotenv())  # .envファイルを探して読み込む
TW_CONSUMER_KEY = os.environ.get('TW_CONSUMER_KEY')
TW_CONSUMER_SECRET = os.environ.get('TW_CONSUMER_SECRET')
TW_TOKEN = os.environ.get('TW_TOKEN')
TW_TOKEN_SECRET = os.environ.get('TW_TOKEN_SECRET')

続いて、main.pyを作成します。
python main.pyと実行すれば、「自動ツイート」と自動でツイートされます。簡単ですね!
メッセージ部分を少しいじればBotも簡単に作れちゃいます。

main.py
import config
from twitter import Twitter, OAuth

def main():
    t = Twitter(
        auth=OAuth(
            config.TW_TOKEN,
            config.TW_TOKEN_SECRET,
            config.TW_CONSUMER_KEY,
            config.TW_CONSUMER_SECRET,
        )
    )

    msg = "自動ツイート"
    t.statuses.update(status=msg)

if __name__ == "__main__":
    main()

Qiitaの記事のURLを取得する

今回のスクリプトはQiitaの記事のURLをツイートすることが目的なので、そこも解説しておきましょう。
QiitaのAPIを利用するには、HTTPSプロトコルを使ってqiita.comに接続します。
そして、Qiita API v2を見ながら欲しい情報をGETします。
レスポンスはjson文字列で返ってくるので、json.loads()を使って辞書型に変えて扱いやすくしておきます。
後は、辞書からurlを取得するだけで、好きな記事のURLが取得できます!

main.py
import http.client
import json

def connect_qiita(uid, page, ppage):
    conn = http.client.HTTPSConnection("qiita.com", 443)
    conn.request(
        "GET",
        "/api/v2/users/"
        + uid
        + "/items?page="
        + page
        + "&per_page="
        + ppage,  # noqa E501
    )
    res = conn.getresponse()
    return res

def get_url(response):
    # print(res.status, res.reason)
    data = response.read().decode("utf-8")
    jsonstr = json.loads(data)
    url = jsonstr[0]["url"]
    return url

def main():
    USER_ID = "macky4"
    ITEM_NUM = 10
    PAGE = "1"
    PAR_PAGE = "10"
    connect_qiita(USER_ID, ITEM_NUM, PAGE, PAR_PAGE)
    url = get_url(response)

ファイルから複数のユーザIDを読み込む

python3でのファイル読み込みは以下のようにして組み込みのopenを用いて行う。

def load_user_ids():
    path = "user_ids.txt"
    with open(path, "r", encoding="utf-8") as f:
        user_ids = [s.strip() for s in f.readlines()]

    return user_ids

作成したスクリプトをHerokuにデプロイ

以下のサイトを参考にさせてもらいました。
Pythonで作ったTwitterのbotをHerokuで動かす

今回作成しているスクリプトはいわゆるボットです。
ただ、現状ではコマンド一つで自動投稿はできますが、完全に自動化されていません。
そこで、無料で利用できるHerokuにスクリプトをデプロイして、何をせずともスクリプトが定期的に実行されるようにしてみました。
大分はっしょってます。すみません。。参考資料と合わせて読んで頂ければ幸いです。

Herokuにデプロイする際の前提条件

  • 無料のHerokuアカウントを持っていること
  • Python3.7がローカルにインストールされていること
  • Postgresqlがローカルにインストールされていること
  • Gitがコマンドで使えること

デプロイする

$ brew install heroku/brew/heroku  # HerokuのCLIをインストールする
$ heroku login  # herokuにログイン
$ heroku create
# $ git add .
# $ git commit -m "commit message"
$ git push heroku master
$ heroku config:set CONSUMER_KEY=*** CONSUMER_SECRET=*** ACCESS_TOKEN_KEY=*** ACCESS_TOKEN_SECRET=***  # 環境変数の設定
$ heroku run python main.py
$ heroku ps:scale web=1  # デプロイの確認
$ heroku open  # デプロイされたページにアクセス

定期的にスクリプトを動かす

$ heroku addons:create scheduler:standard
$ heroku addons:open scheduler

herokuでのデータベース利用

以下のサイトを参考にさせてもらいました。
heroku で python 動かすチュートリアルをやったメモ

19
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
19
Help us understand the problem. What is going on with this article?