Ich bin wahrscheinlich abgeschafft und wenn ich auf die Bildschirmzeit schaue, verbringe ich durchschnittlich 3 Stunden pro Tag auf Twitter. Ich mache fast ein Achtel eines Tages auf Twitter ... Nun, es gibt Leute, die noch schlimmer sind als ich ... Wenn Sie Lust dazu haben, folgen Sie mir bitte → @y_a_m_a_y_a (Ich habe das Konto geändert, mit dem Qiita arbeitet.)
Das meiste, was ich mache, ist, Tweets auf der Timeline anzuordnen, auf der ich die Tweets der Leute sehe, Trends zu überprüfen (weil ich für Trends empfindlich bin), also wollte ich ein Programm erstellen, um diese Zeit zu verkürzen ..
Hier ist die erstellte Demo (auf Twitter als Video veröffentlicht).
Google Colab (Umgebungskonstruktion war mühsam) Der Code befindet sich auf GitHub und google drive.
Grundsätzlich gibt es viele Erklärungen für diesen Teil.
Um die Twitter-API nutzen zu können, müssen Sie sich als Entwickler registrieren. Dieser Teil wurde von verschiedenen Personen geschrieben. Bitte beziehen Sie sich darauf. Zusammenfassung der Verfahren von der Registrierung der Twitter-API (Kontoantragsmethode) bis zur Genehmigung * Informationen ab August 2019 Da es ein akademischer Zweck für Studenten war, zu studieren, wurde ich sofort in ungefähr einem Tag zertifiziert.
Mit der Twitter-Bibliothek können Sie ganz einfach auf Twitter twittern, folgen usw. (Bitte bei Verwendung mit Colab installieren)
Zunächst ist eine Authentifizierung erforderlich. Authentifizieren Sie Twitter mit dem folgenden Code.
AOuth.py
import twitter
#Legen Sie den erhaltenen Schlüssel und das Zugriffstoken fest(Geben Sie Ihren eigenen Schlüssel ein)
auth = twitter.OAuth(consumer_key="-------------------",
consumer_secret="-------------------",
token="-------------------",
token_secret="-------------------")
t = twitter.Twitter(auth=auth)
Als nächstes kommt der Erwerb von Tweets. Sie können Tweets mit dem folgenden Code erhalten.
python
t.statuses.home_timeline(count =Anzahl der erfassten Tweets)
Sie können es mit tun. Es wird mit einer JSON-Datei zurückkommen. Diese Seite ist als Antwortbeispiel sehr einfach zu verstehen. Wenn Sie die JSON-Bibliothek importieren, können Sie JSON wie eine Liste verwenden
Beispiel
import json
last_id = get_data[len(get_data)-1]["id"]
Der obige Code erhält die ID des Tweets.
Aufgrund der strengen Einschränkungen der Twitter-API ist die Anzahl der Tweets, die gleichzeitig erfasst werden können, auf etwa 200 festgelegt. Offizielle Referenz Daher können Sie es erhalten, indem Sie diesen Code wiederholt mit der while-Anweisung lesen.
Mit max_id können Sie Tweets vor der angegebenen Tweet-ID abrufen.
python
t.statuses.home_timeline(count =Anzahl der erfassten Tweets,max_id =Tweet id)
Hierbei ist zu beachten, dass Tweets mit der angegebenen ID mehrmals enthalten sind. Mit der if-Anweisung ausschließen.
Jetzt kannst du die Tweets bekommen !!!
Gemäß den API-Spezifikationen scheint es jedoch, dass die Anzahl der zurückverfolgbaren Tweets etwa 800 Tweets beträgt ... (Was zur Hölle ...) [Artikel, die mit Tweepy 3200 Tweets erhalten können](https://www.pytry3g.com/entry/python-twitter-timeline#Cursor%E3%82%92%E4%BD%BF%E3%81%A3% E3% 81% A6% E5% A4% A7% E9% 87% 8F% E3% 81% AE% E3% 83% 84% E3% 82% A4% E3% 83% BC% E3% 83% 88% E3% 82% 92% E5% 8F% 96% E5% BE% 97% E3% 81% 99% E3% 82% 8B), aber ich konnte es nicht verwenden, da ich unmittelbar nach dem Versuch im 15-Minuten-Twitter-API-Limit gefangen war. Ich habe nach 800 Tweets aufgegeben ...
Die ursprüngliche Idee war, dass ich zu einem 24-Stunden-Tweet zurückkehren wollte, also werde ich die datetime-Bibliothek verwenden, um die Zeit herauszufinden. Da die Tweet-Zeit nicht im Datum / Uhrzeit-Format vorliegt, wird sie durch eine Zeichenfolgenoperation zwangsweise konvertiert. Das ist der folgende Teil.
python
import datetime
date_create = get_data[int(len(get_data)-1)]["created_at"] #Holen Sie sich das Erstellungsdatum und die Erstellungszeit aus dem Tweet
date_create_at = datetime.datetime(year=int(date_create[26:30]), month=int(date.month),
day=int(date_create[8:10]), hour=int(date_create[11:13]),minute=int(date_create[14:16]))#Konvertieren Sie die Posting-Zeit für Tweets
Ich wollte die Zeit vergleichen (Ende, wenn es mehr als 24 Stunden her ist), also subtrahiere ich sie und konvertiere sie in Sekunden, damit es einfach ist, die Werte zu vergleichen. Ich habe es nicht benutzt ...
python
diff = date - date_create_at
...
if diff.seconds >= 86400 or count >15: #24 Stunden oder wenn Sie in einem Loop-Limit stecken bleiben
break
Wenn Sie diese Bereiche kombinieren, erhalten Sie 800 Tweets aus der aktuellen Zeit! (Ja)
Dann sortieren. Sie können die Bibliothekssortierung zum Sortieren verwenden, ohne die Effizienz des Algorithmus zu berücksichtigen. Da es sich um eine mehrdimensionale Listensortierung handelt, verwenden Sie Lamda, um sie zu sortieren.
python
data.sort(key=lambda data: data[5]) #Sortieren Sie mit einem Lambda-Ausdruck(Fabo)
Auch dieses Mal werden wir nach der Anzahl der Favoriten und der Anzahl der RTs sortieren. Kopieren Sie also das Datenarray. (Weil es beim Exportieren einfacher zu sein scheint) Kopieren verwendet die Kopierbibliothek.
python
import copy
data_RT = copy.copy(data)
Schließlich exportieren. Erstellen Sie es unter Bezugnahme auf von Twitter offiziell veröffentlichter HTML-Generator. Ich habe festgestellt, dass die URL bei korrekter Angabe korrekt angezeigt wird. Ich muss also nur den Wert ersetzen. In einer Funktion definiert.
python
#Erstellen Sie HTML aus Tweets (Funktion)
def create_html(text ,username ,userid, tweetid):
html = '<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">' + text + '</p>—' + username +'(@' + userid +') <a href="https://twitter.com/' + userid + '/status/' +tweetid + '?ref_src=twsrc%5Etfw"></a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>'
return html
Schreiben Sie die letzten 10 in die For-Anweisung und Sie sind fertig! !!
Es ist schade, dass die Twitter-API so restriktiv ist, dass wir nur etwa 3 Stunden zurückgehen konnten, anstatt die ersten 24 Stunden zurück zu gehen. (Ich denke, die Ergebnisse werden sich hier je nach Anzahl der Follower ändern.) Außerdem kann ich es nicht in jeder persönlichen Umgebung tun, ohne mich als Entwickler zu registrieren, und da ich es mit colab mache, habe ich das Gefühl, dass die Dateierzeugung im Vergleich zu lokal nicht gut funktioniert, und es gibt viele Verbesserungen ...
Es scheint, dass der Abschluss von Tsui etwas länger dauern wird. .. .. · Ausführungsergebnis
Legacy-Code-Gefühl ...
python
import twitter
import json
import datetime
import copy
#Erstellen Sie HTML aus Tweets (Funktion)
def create_html(text ,username ,userid, tweetid):
html = '<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">' + text + '</p>—' + username +'(@' + userid +') <a href="https://twitter.com/' + userid + '/status/' +tweetid + '?ref_src=twsrc%5Etfw"></a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>'
return html
#Legen Sie den erhaltenen Schlüssel und das Zugriffstoken fest(Geben Sie Ihren eigenen Schlüssel ein)
auth = twitter.OAuth(consumer_key="-------------------",
consumer_secret="-------------------",
token="-------------------",
token_secret="-------------------")
t = twitter.Twitter(auth=auth)
#Holen Sie sich die Zeitleiste(Gehen Sie mit der while-Anweisung so weit wie möglich zurück)
date = datetime.datetime.now() #Holen Sie sich jetzt die Zeit
date = datetime.datetime(year=date.year, month=date.month, day=date.day, hour=date.hour,minute=date.minute)
count = 0 #Zählen der abgerufenen Tweets
data =[] #Speichern Sie die erfassten Daten
#data_swap =[]
diff = date - date
print("Startzeit",date)
while(1): #Starten Sie die Datenerfassung
if diff.seconds >= 86400 or count >15: #24 Stunden oder wenn Sie in einem Loop-Limit stecken bleiben
print("Ende der Suche")
print(count)
break
elif count ==0: #Das erste Mal
get_data = t.statuses.home_timeline(count = 200)
for i in range(len(get_data)):
# create,"id",name,userid,text,"favorite_count","retweet_count"
data_swap = [str(get_data[i]["created_at"]),str(get_data[i]["id"]),str(get_data[i]["user"]["name"]),str(get_data[i]["user"]["screen_name"]),str(get_data[i]["text"]),int(get_data[i]["favorite_count"]),int(get_data[i]["retweet_count"])]
data.append(data_swap)
last_id = get_data[len(get_data)-3]["id"] #Holen Sie sich vorherige Tweets von der ID des letzten Tweets
date_create = get_data[int(len(get_data)-1)]["created_at"]
date_create_at = datetime.datetime(year=int(date_create[26:30]), month=int(date.month), day=int(date_create[8:10]), hour=int(date_create[11:13]),minute=int(date_create[14:16]))#Holen Sie sich Zeit, um Tweets zu posten
count = count +1
else: #Zu anderen Zeiten
get_data = t.statuses.home_timeline(count = 800, max_id = last_id)
if len(get_data) == 0: #Wenn die Anzahl der erfassten Tweets aufgrund des Limits 0 wird
print("Ende der Suche")
break
for i in range(len(get_data)):
if i >0: # max_Holen Sie sich nach dem durch id angegebenen Tweet
data_swap = [str(get_data[i]["created_at"]),str(get_data[i]["id"]),str(get_data[i]["user"]["name"]),str(get_data[i]["user"]["screen_name"]),str(get_data[i]["text"]),int(get_data[i]["favorite_count"]),int(get_data[i]["retweet_count"])]
data.append(data_swap)
last_id = get_data[len(get_data)-1]["id"] #Holen Sie sich vorherige Tweets von der ID des letzten Tweets
date_create = get_data[int(len(get_data)-1)]["created_at"]
date_create_at = datetime.datetime(year=int(date_create[26:30]), month=int(date.month), day=int(date_create[8:10]), hour=int(date_create[11:13]),minute=int(date_create[14:16]))#Holen Sie sich Zeit, um Tweets zu posten
diff = date -date_create_at
count = count +1
print("Endzeit",date_create_at)
print("Gesamtzahl der Daten:",len(data))
#Sortieren
size = len(data)
data.sort(key=lambda data: data[5]) #Sortieren Sie mit einem Lambda-Ausdruck(Fabo)
data_RT = copy.copy(data)
data_RT.sort(key=lambda data: data[6]) #Sortieren Sie mit einem Lambda-Ausdruck(RT)
#Ergebnisse anzeigen(HTML)
path = '/content/drive/My Drive/Colab Notebooks/TwitterAPI/' + 'data/TimeLine' +str(date.month) +'Mond' +str(date.day) + 'Tag' +'.html'
with open(path, mode='w') as f:
f.write("<H1>Die 10 besten Tweets mit den meisten Favoriten!<H1>")
f.write("<H1>"+str(date + datetime.timedelta(hours =9)) + "~" +str(date_create_at + datetime.timedelta(hours =9)) +"<H1>")
for i in range(10):
f.write("<H2>Nein."+str(i+1)+"Rang!! "+ str(data[size-1-i][5]) + "Fabo<H2>")
f.write(create_html(data[size-1-i][4],data[size-1-i][2],data[size-1-i][3],data[size-1-i][1]))
#Bei RT
f.write("<H1>Die 10 besten Tweets mit den meisten RTs!<H1>")
for i in range(10):
f.write("<H2>Nein."+str(i+1)+"Rang!! "+ str(data[size-1-i][6]) + "RT <H2>")
f.write(create_html(data_RT[size-1-i][4],data_RT[size-1-i][2],data_RT[size-1-i][3],data_RT[size-1-i][1]))
print("Ende des Schreibens")