[PYTHON] Holen Sie sich beliebte Tweets von der Twitter-Timeline, listen Sie sie auf und absolvieren Sie Tsui Abolition

Hintergrund

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).

Was willst du tun

  1. Holen Sie sich Ihre eigene Zeitleiste
  2. Sortieren Sie in absteigender Reihenfolge von Favo und RT
  3. Exportieren Sie Top-Tweets in HTML

Umgebung

Google Colab (Umgebungskonstruktion war mühsam) Der Code befindet sich auf GitHub und google drive.

1. Holen Sie sich Ihre eigene Zeitleiste

Grundsätzlich gibt es viele Erklärungen für diesen Teil.

Entwicklerregistrierung

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.

Holen Sie sich die Zeitleiste

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)

Holen Sie sich Tweets

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.

Gehen Sie mit max_id zurück zu Tweets

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 ...

Zeit bekommen

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)

Sortieren Sie in absteigender Reihenfolge von Favo und RT

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)

Exportieren Sie Top-Tweets in HTML

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>&mdash;' + 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! !!

Impressionen

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

スクリーンショット 2020-05-16 15.13.34.png

Endlich der Code

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>&mdash;' + 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")

Recommended Posts

Holen Sie sich beliebte Tweets von der Twitter-Timeline, listen Sie sie auf und absolvieren Sie Tsui Abolition
Holen Sie sich die Adresse von Längen- und Breitengrad
Holen Sie sich Twitter-Tweets, Follower, Follower, Likes, mit urllib und beautifulSoup