見出し画像

【なんでも自動化してみたい🤖①】 Twitter ✖️ note ✖️ Heroku

なんでも自動化していきたい!!!!!🤖🤖🤖

自動化って単語がすごいカッコいいですよね?
定期実行するTwitter Botを作っていこうと思います!!!!
やっていきましょう!

Twitter🕊

APIの申請✨

とにかくここが山です。⛰⛰⛰⛰⛰⛰⛰⛰⛰⛰⛰
しかも高めです。🦖🦖🦖🦖🦖🦖🦖🦖🦖🦖🦖
ですが、申請後すぐAPIを利用することができました!!!

頑張っていきましょう。
参考になる記事👇

Heroku🟪

新規登録✨

これは壁低めです。🐜🐜🐜🐜🐜🐜🐜🐜🐜🐜🐜
飛び越えてやりましょう。

装備が整いました。🥷🥷🥷🥷🥷

Twitter APIについて❓

  • API KEY

  • API SECRET

  • ACCESS TOKEN

  • ACCESS TOKEN SECRET

上記の4つをとりあえず取得しましょう。
(メモ帳なんかに保存?しておきましょう)
下の記事が時にわかりやすいです。

 noteのRSSについて❓

RSSについてはhttps://www.asobou.co.jp/blog/life/rss-2でわかるかと思います。
下の画像になんとRSSのURLが!!!!!!

Herokuについて❓

とりあえず使えるコマンドでもメモしておきます。。。。

$brew tap heroku/brew && brew install heroku # Macの方向けです🙇‍♂️
$heroku login                                # herokuにログイン!!!
$git init                                    # https://atmarkit.itmedia.co.jp/ait/articles/2003/12/news010.html
$git add .                                   # ローカルの差分追加
$git commit -m "<commit_msg>"                # <commit_msg>は好みのコミットメッセージで!!!
$heroku create <app_name>                    # herokuのアプリ作成, <app_name>は無しでもおk
$git push heroku master                      # Herokuへデプロイ⏫⏫⏫⏫

デプロイしたソースコード❓(コードが汚い)

ディレクトリ

├── Procfile
├── README.md
├── infra
│   ├── rss.py
│   └── twitter.py
├── main.py
├── requirements.txt
├── runtime.txt
└── tasks
    └── task1_note_tweet.py

ソースコード作成の手順

1.依存関係のインストール

$pip install tweepy
$pip install APScheduler
$pip install feedparser
$pip freeze > requirements.txt

2.まずTwitter APIと利用する

# infra/twitter.py

import tweepy

# 返り値がtweepyに依存しているから△
def get_client(api_key: str, api_secret: str, access_token: str, access_token_secret: str) -> tweepy.API:
    auth = tweepy.OAuthHandler(api_key, api_secret)
    auth.set_access_token(access_token, access_token_secret)
    return tweepy.API(auth)

3.RSSフィードを読む

# infra/rss.py

import feedparser

# 返り値がfeedparserに依存してるから本当に△
def get_feed(url: str) -> object:
    return feedparser.parse(url)

4.RSSを読み込んでツイートする関数でも作る

# tasks/task1_note_tweet.py

from typing import Callable

TWEET_BODY = """
{}
{}
"""

def tweet_note(tweet : Callable[[str], None], title: str, url: str, retry=True):
    try:
        tweet(TWEET_BODY.format(title, url))
    except:
        if retry:
            tweet_note(tweet, title, url, retry=False)
        else:
            logger.info("failed to tweet")

5.main.py!!!

import random
import os

from apscheduler.schedulers.blocking import BlockingScheduler
from infra import twitter, rss
from tasks import task1_note_tweet

API_KEY = 'Twitter API KEY'
API_SECRET = 'Twitter API SECRET'
ACCESS_TOKEN = 'Twitter ACCESS TOKEN'
ACCESS_TOKEN_SECRET = 'Twitter ACCESS TOKEN SECRET'
RSS_URL = 'note RSS URL'

scheduler = BlockingScheduler()

@scheduler.scheduled_job('interval', minutes=30)
def job_30_minutes():
    twitter_client = twitter.get_client(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
    feed = rss.get_feed(RSS_URL).entries
    feed_entry = random.choice(feed)
    task1_note_tweet.tweet_note(twitter_client.update_status, feed_entry.title, feed_entry.links[0].href)

scheduler.start()

6.Profile を忘れずに!!!✍️

clockpython main.py

まとめ✅

非常に簡単にBotを作成できました。🤖
今回も誰の役にも立たない記事を書いてしました。😂
今後もっといい記事が吐き出せるように精進したいと思います。🙇‍♂️
また何かを自動化できるネタを思いついたら書こうと思います。

関係ないのですが、次回はGo x DeZeroの続きでも書こうともいます!
ではおやすみ、おはよう、こんにちは

いいなと思ったら応援しよう!