読者です 読者をやめる 読者になる 読者になる

paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

マストドンとツイッターに同時投稿できるツールをPythonで作ってみた

f:id:paiza:20170501120821j:plain
Photo by Bryan Kemp
秋山です。

最近話題の「Mastodon」( マストドン )ですが、皆さん使っていますか?

私は、個人的にtootとtweetを同時にしたいと思うことが多いです。せっかくなので、それを叶えるツールを(ざっくりですが)Pythonで作ってみました。

便利なライブラリや認証機構を使ってサクッと作るレシピという感じで、基本的にはAPIを叩くだけなので技術的に難しいことはありません。とにかく素早くBotみたいなものを作りたい!という人の参考になればと思います。

(※ただしあまりインスタンスへ負荷がかからないようにしましょう、Botを作るのであれば自分でインスタンスを立てるのが望ましいかと思います)

Mastodonの設定

まずは Mastodon.py と twython を pip でインストールします。

pip install Mastodon.py twython

次に、Mastodonにアプリの登録をしましょう。Twitterで言うところの、連携アプリの登録みたいな感じです。

from mastodon import Mastodon
Mastodon.create_app("toot & tweet",
    api_base_url = "https://mstdn.jp",
    to_file = "app_key.txt"
)

上記のコードを一度実行すると app_key.txt というアプリのキーが吐き出されますので、それを使ってログインします。


app_key.txt を指定して mstdn.jp にログインしましょう。

from mastodon import Mastodon

mastodon = Mastodon(
    client_id="app_key.txt",
    api_base_url = "https://mstdn.jp")

mastodon.log_in(
    "登録メールアドレス",
    "パスワード",
    to_file = "user_key.txt")

上記のコードを実行すると、 user_key.txt に指定したアカウントでAPIを使うキーが吐き出されます。


api_key.txt と user_key.txt を指定すると、こんな感じでAPIを叩くことができます。

from mastodon import Mastodon

def toot(s):
    mastodon = Mastodon(
        client_id="app_key.txt",
        access_token="user_key.txt",
        api_base_url = "https://mstdn.jp")
    mastodon.toot(s)

toot("TEST")

ここまでがMastodon用のコードになります。

Twitterの設定

とりあえずTwitterにログインして、Twitter Appsのページを開き、Create New Appから必要事項を記入しましょう。
f:id:paiza:20170501115919p:plain

その後、作られたアプリケーションを開いて Keys and Access Token から Token Action で Create my access token を押してトークンを作ります。

Consumer Key (API Key)
Consumer Secret (API Secret)
Access Token
Access Token Secret

この4項目の右側のトークンを、下記のコードにコピペして使います。

import datetime, twython
c_key  = "Consumer Key (API Key)"
cs_key = "Consumer Secret (API Secret)"
a_key  = "Access Token"
as_key = "Access Token Secret"

def tweet(s):
    api = twython.Twython(c_key, cs_key, a_key, as_key)
    api.update_status(status=s)

tweet("TEST")

こんな感じでtweetが成功します。


ソースコードをいちいち書き換えたりするのは面倒なので、コマンドラインツール化をしましょう。以前このブログでも紹介した「Python Fire」を使ってコマンドラインツール化します。

Python Fireを使ってみた記事はこちら
paiza.hatenablog.com

import datetime, twython
c_key  = "Consumer Key (API Key)"
cs_key = "Consumer Secret (API Secret)"
a_key  = "Access Token"
as_key = "Access Token Secret"

def tweet(s):
    api = twython.Twython(c_key, cs_key, a_key, as_key)
    api.update_status(status=s)


from mastodon import Mastodon
def toot(s):
    mastodon = Mastodon(
                        client_id="app_key.txt",
                        access_token="user_key.txt",
                        api_base_url = "https://mstdn.jp")
    mastodon.toot(s)

def toot_and_tweet(s):
    tweet(s)
    toot(s)


if __name__ == '__main__':
    import fire
    fire.Fire(toot_and_tweet)

こんな感じで toot_and_tweet.py というファイルを作れば、コマンドライン上でこんなふうにコマンドを叩くだけで
f:id:paiza:20170501122750p:plain

tootとtweetが一度にできます。
f:id:paiza:20170501120356p:plain

■まとめ

便利なライブラリ群と簡単な認証機構のおかげで、簡単に自分の欲しいツールを作ることができました。

tootとtweetの連携に限らず、いろいろ応用できると思います。

Pythonの講座も公開中!プログラミングが動画で学べるレッスン


paizaは、プログラミング未経験者・初心者向け学習サービス「paizaラーニングを、新サービスとして独立オープンいたしました。

今回記事の中で使用しているPythonの入門講座も好評公開中です。ぜひごらんください!

↓詳しくはこちら
paiza.jp

そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
paiza.jp
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza

プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編