Sowohl in der Browserversion als auch in der App-Version können Sie nur den Trend von Twitter top 30 sehen. Es ist mühsam, sich ständig an die Trendseite zu halten, und es ist auch schwierig, Trends in __ jeder Region __ zu erkennen.
Verwenden wir also die Twitter-API, um den Trend abzurufen und einen Twitter-Bot zu erstellen, der Sie benachrichtigt, wenn sich ein Hashtag im Trend befindet. Sie können die Twitter-API verwenden, um top 50 Trends in jeder Region __ zu erhalten. Vielleicht kann es kostenlos betrieben werden. Ich denke, es funktioniert nur, indem ein Teil des im Artikel behandelten Codes neu geschrieben wird.
Wenn Sie es nur lokal ausprobieren möchten, überspringen Sie es bitte.
Bitte mach es.
Erstellen Sie ein Verzeichnis, um die Bot-Dateien zu speichern. Speichern Sie alle unten erstellten Dateien hier. Hier ist es "vtuber-twitter-bot". Am Ende sieht es so aus.
vtuber-twitter-bot
├── dics.py
├── tools.py
├── main.py
├── index.py
├── runtime.txt
├── requirements.txt
├── Procfile
heroku Dieser Artikel ist detailliert. Registrieren und installieren wir die CLI. Da es kostenlos funktioniert, muss Creca nicht registriert werden.
Python 3.x Ich werde den Bot-Code in Python 3.x schreiben. Die zu installierenden Bibliotheken sind wie folgt. Bitte lassen Sie mich wissen, wenn es irgendwelche Auslassungen gibt. Vielleicht kann alles mit pip installiert werden.
Twitter API Dieser Artikel ist detailliert. Notieren Sie sich den API-Schlüssel Consumer_secret, Access_token und Access_secret.
Führen Sie den folgenden Code aus. Sie sehen eine Liste der Städte, in denen Sie Trends abrufen können. Finden Sie die Stadt, die Sie erhalten möchten, indem Sie sich auf "Land" (Ländername) und "Name" (Städtename) verlassen, und notieren Sie sich das "Weh".
import tweepy
def twitter_api():
CONSUMER_KEY = 'YOUR API KEY'
CONSUMER_SECRET = 'YOUR CONSUMER SECRET'
ACCESS_TOKEN = 'YOUR ACCESS TOKEN'
ACCESS_SECRET = 'YOUR ACCESS SECRET'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
return api
api = twitter_api()
api.trends_available()
#>>[{'country': '',
#>> 'countryCode': None,
#>> 'name': 'Worldwide',
#>> 'parentid': 0,
#>> 'placeType': {'code': 19, 'name': 'Supername'},
#>> 'url': 'http://where.yahooapis.com/v1/place/1',
#>> 'woeid': 1},
#>> {'country': 'Canada',
#>> 'countryCode': 'CA',
#>> 'name': 'Winnipeg',
#>> 'parentid': 23424775,
#>> 'placeType': {'code': 7, 'name': 'Town'},
#>> 'url': 'http://where.yahooapis.com/v1/place/2972',
#>> 'woeid': 2972},
#>> .
#>> .
#>> .
Ich denke, das folgende Weh reicht aus, um den Welttrend, den Japan-Trend und den Trend der Großstädte in Japan zu erfassen. Wenn es ein Leck gibt, suchen Sie es bitte mit der oben beschriebenen Methode.
woeid_dic = {'Welt': 1, 'Japan': 23424856,
'Tokio': 1118370, 'Kyoto': 15015372, 'Osaka': 15015370,
'Sapporo': 1118108, 'Sendai': 1118129, 'Nagoya': 1117817,
'Kobe': 1117545, 'Hiroshima': 1117227, 'Fukuoka': 1117099,
'Saitama': 1116753, 'Chiba': 1117034, 'Yokohama': 1118550,
'Kawasaki': 1117502, 'Sagamihara': 1118072, 'Kitakyushu': 1110809,
'Okayama': 90036018, 'Niigata': 1117881, 'Takamatsu': 1118285,
'Hamamatsu': 1117155, 'Kumamoto': 1117605, 'Okinawa': 2345896}
Wenn Sie auf "Weh" verzichten, ist es endlich Zeit, den Trend zu erkennen.
city = 'Tokio'
woeid = woeid_dic[city]
trends = api.trends_place(woeid)
#Drucken Sie nur Trendranking und Inhalt
for trend in trends:
trend_l = 0
for trend_id in trend['trends']:
trend_n = trend_id['name']
trend_l += 1
print(city, trend_l, trend_n)
Im Folgenden erstellen wir als Beispiel einen Bot, der benachrichtigt, wenn ein geeignetes Hash-Tag in den Trend eintritt. Das Design ist wie folgt. Bitte ändern Sie die Erfassungshäufigkeit und die Benachrichtigungshäufigkeit entsprechend. __ Beachten Sie zu diesem Zeitpunkt das API-Limit. __ (GET Trends / Ort ist 75 Anfragen / 15 Minuten)
Wenn Sie nur dics.py
umschreiben, sollte es Ihr Lieblingsbot sein. [](
Wenn Sie woeid_dic
ändern, ändern Sie auch now_trend
, tmp_record
, Recent_trends
in tools.py
. )
Zum besseren Verständnis empfehlen wir, dass Sie versuchen, jeden Code lokal auszuführen.
Seien Sie vorsichtig, wenn Sie lokal ausgeführt werden, da os.environ ['ENV_NAME']
der Code ist, der den Wert der Umgebungsvariablen ENV_NAME
empfängt.
dics.py
dics.py
#Liste der Hash-Tags, über die Sie benachrichtigt werden möchten, wenn ein Trend vorliegt
check_trend = ['#Hashtag', '#Trend']
#Woeid in der Gegend, um den Trend zu bekommen
woeid_dic = {'Welt': 1, 'Japan': 23424856}
tools.py
tools.py
import pickle
import os
import tweepy
from dics import check_trend, woeid_dic
#Vorbereitung zum Twittern oder Abrufen von Daten auf Twitter
def twitter_api():
CONSUMER_KEY = os.environ['API_KEY']
CONSUMER_SECRET = os.environ['API_SECRET_KEY']
ACCESS_TOKEN = os.environ['ACCESS_TOKEN']
ACCESS_SECRET = os.environ['ACCESS_TOKEN_SECRET']
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
return api
def twitter_trend_notification(tw_switch):
api = twitter_api()
trend_log = './trend_log.pickle'
now_trend = {}
tmp_record = {}
recent_trends = {}
for city in woeid_dic.keys():
now_trend.update({city: {}})
tmp_record.update({city: {}})
recent_trends.update({city: {}})
#Holen Sie sich Trends und extrahieren Sie Regionen / Rankings / Trendwörter
for city, woeid in woeid_dic.items():
trends = api.trends_place(woeid)
for trend in trends:
trend_l = 0
for trend_id in trend['trends']:
trend_l += 1
trend_name = trend_id['name']
if trend_name in check_trend:
print(city, trend_l, trend_name)
now_trend[city].update({trend_name: trend_l})
#Extrahieren Sie nur die Wörter, die Sie benachrichtigen möchten, aus den erfassten Trends
for city in now_trend.keys():
for c_trend in check_trend:
if c_trend in now_trend[city].keys():
in_dic_tmp = {c_trend: now_trend[city][c_trend]}
tmp_record[city].update(in_dic_tmp)
if not os.path.exists(trend_log):
with open(trend_log, 'wb') as pi:
pickle.dump(tmp_record, pi)
with open(trend_log, 'rb') as pi:
old_record = pickle.load(pi)
#print(tmp_record)
#print(old_record)
#Aktualisieren Sie, wenn das Ranking höher als der vorherige Datensatz ist
#Hinzufügen, wenn es einen Trend gibt, der nicht im letzten Datensatz enthalten ist
new_record = old_record
for city in now_trend.keys():
for t_trend in tmp_record[city].keys():
if t_trend in old_record[city].keys():
if tmp_record[city][t_trend] < old_record[city][t_trend]:
new_record[city][t_trend] = tmp_record[city][t_trend]
else:
in_dic_tmp = {t_trend: tmp_record[city][t_trend]}
new_record[city].update(in_dic_tmp)
with open(trend_log, 'wb') as pi:
pickle.dump(new_record, pi)
#if new_record != {'Welt': {}, 'Japan': {}}:#, 'Tokio': {}}:
# print('trend : ', new_record)
#Extrahieren Sie die Rangfolge von 10 früheren Benachrichtigungen
recent_tweets = api.user_timeline(count=10, tweet_mode='extended')
#recent_tweets = [tweet.full_text for tweet in recent_tweets]
for tweet in recent_tweets:
sp_tw = tweet.full_text.split('\n')
if '[Trendbenachrichtigung]' in sp_tw[0]:
hashtag = '#'+ tweet.entities['hashtags'][0]['text']
for key_city in recent_trends.keys():
try:
re_lev = sp_tw[2].replace('In den letzten 15 Minuten "{}"Aber{}Trend'.format(hashtag, key_city), '').replace('Es scheint, dass es den Rang erreicht hat.', '')
re_lev = int(re_lev)
try:
if recent_trends[key_city][hashtag] > re_lev:
recent_trends[key_city][hashtag] = re_lev
except:
recent_trends[key_city].update({hashtag: re_lev})
except:
pass
#Wenn Sie eine Benachrichtigung ausführen, twittern Sie, wenn das Ranking höher ist als die vorherige Benachrichtigung
if tw_switch:
for city in new_record.keys():
for trend_name in new_record[city].keys():
if not trend_name in recent_trends[city].keys():
tw_flag = 1
elif recent_trends[city][trend_name] > new_record[city][trend_name]:
tw_flag = 1
else:
tw_flag = 0
if tw_flag and (trend_name in check_trend):
tw_str = '[Trendbenachrichtigung]\n\n'
#tw_str = '[Trendbenachrichtigung] Während des Testbetriebs\n\n'
tw_str += 'In den letzten 15 Minuten "{}"Aber{}Trend{}Es scheint, dass es den Rang erreicht hat.'.format(trend_name, city, new_record[city][trend_name])
print(tw_str)
api.update_status(tw_str)
#Löschen Sie den Datensatz, wenn Sie twittern
os.remove(trend_log)
main.py
main.py
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
from tools import twitetr_trend_notification
#Tweet nicht
@sched.scheduled_job('cron', minute='5,10,20,25,35,40,50,55', hour='*')
def main_wo_tw():
try:
tw_switch = 0
twitter_trend_notification(tw_switch)
except Exception as e:
print('ERROR on twitter_trend_notification')
print(e)
#Tweet
@sched.scheduled_job('cron', minute='0,15,30,45', hour='*')
def main_w_tw():
try:
tw_switch = 1
twitter_trend_notification(tw_switch)
except Exception as e:
print('ERROR on twitter_trend_notification')
print(e)
if __name__ == '__main__':
sched.start()
index.py
#leer. Ich habe das Gefühl, ich brauche es nicht.
Erstellen Sie runtime.txt
, require.txt
, Procfile
.
runtime.txt
python-3.6.2
requirements.txt
tweepy==3.6.0
APScheduler==3.0.3
Procfile
web: python index.py
clock: python main.py
app-name
ist eine gute Idee, das Verzeichnis zu benennen, in dem Sie Ihren Code speichern möchten.
Die folgenden Befehle sollten in diesem Verzeichnis ausgeführt werden.
heroku login
heroku create app-name
Sie können Umgebungsvariablen mit heroku config: set ENV_NAME =" VALUE "
setzen. Die letzten vier werden so ausgeführt, wie sie sind.
app-name
ist der von früher.
appname=app-name
heroku config:set ACCESS_TOKEN="YOUR TWITTER ACCESS TOKEN" --app $appname
heroku config:set ACCESS_TOKEN_SECRET="YOUR TWITTER ACCESS TOKEN SECRET" --app $appname
heroku config:set API_KEY="YOUR TWITTER API KEY" --app $appname
heroku config:set API_SECRET_KEY="YOUR TWITTER API SECRET KEY" --app $appname
heroku config:set TZ="Asia/Tokyo" --app $appname
app-name
ist der von früher.
appname=app-name
git init
git add .
git commit -m "new commit"
git remote add heroku https://git.heroku.com/$appname.git
git push heroku master
Sie können die gedruckten Protokolle anzeigen, indem Sie den Befehl heroku logs -t
im Verzeichnis app-name
ausführen.
Zum Debuggen ist es einfacher, das folgende Shell-Skript eine Ebene über dem Verzeichnis "app-name" in das Verzeichnis zu stellen.
Führen Sie nach dem Ändern des Codes ../ heroku_deploy.sh
im Verzeichnis app-name
aus. Wenn dies fehlschlägt, setzen Sie es mit ch mod u + x ../ heroku_deploy.sh
auf ausführbar.
heroku_deploy.sh
git add .
git commit -m "new commit"
git push heroku master
heroku ps:scale web=0 clock=1
heroku ps
heroku logs --tail
Recommended Posts