[PYTHON] Eine Geschichte, die ich süchtig danach war, eine Video-URL mit Tweepy zu bekommen

Einführung

Die neuesten Bilder und Videos der Schauspielerin Mayu Matsuoka werden jeden Tag automatisch gesendet. Während der Erstellung von LINE Bot war ich süchtig danach, die Bild- / Video-URL von tweepy zu erhalten, also werde ich sie teilen.

Wenn ich jetzt zurückblicke, habe ich viel verschwendete Zeit verbracht, aber wenn ich vorerst einen Artikel schreibe, wird diese verschwendete Zeit ein wenig belohnt! !! Ich werde es schreiben.

L.png

Originalcode

search_tweets.py


import os
import tweepy
from datetime import datetime, date, timedelta
from dateutil.relativedelta import relativedelta

consumer_key = os.getenv('TWITTER_CONSUMER_KEY')
consumer_secret = os.getenv('TWITTER_CONSUMER_SECRET')
access_token = os.getenv('TWITTER_ACCESS_TOKEN')
access_token_secret = os.getenv('TWITTER_ACCESS_TOKEN_SECRET')
bearer_token = os.getenv('TWITTER_ACCESS_TOKEN_SECRET')


#Suchen Sie auf Twitter nach Tweets zu Mayu Matsuoka und erhalten Sie die URL
def search_tweets():
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth)

    yesterday = datetime.strftime(datetime.today() - relativedelta(days=1), f"%Y-%m-%d")
    #Twitter-Suche unter der Bedingung, dass es Bilder und Videos von 10 oder mehr Likes gibt, gestern bis heute, 1 oder mehr Retweets, wobei Retweets weggelassen werden
    q = f'#Mayu Matsuoka ODER Mayu Matsuoka Filter:media exclude:retweets min_faves:10 since:{yesterday} min_retweets:1'

    #Der problematische Teil
    tweets = tweepy.Cursor(api.search, q=q).items(20)

    contents = []
    for tweet in tweets:
        print(tweet.text)
        print(tweet.extended_entities)
        try:
            media = tweet.extended_entities['media']
            for m in media:
                print(m)
                preview = m['media_url_https']
                if m['type'] == 'video':
                    origin = [variant['url'] for variant in m['video_info']['variants'] if variant['content_type'] == 'video/mp4'][0]
                else:
                    origin = m['media_url_https']

                #Formatiert zum Senden mit LINE Bot
                content = {'preview': preview, 'origin': origin, 'type': m['type']}
                contents.append(content)

            print('--------------------------------------------')
        except:
            print('Error')
            print('--------------------------------------------')
    return contents


if __name__ == "__main__":
    search_tweets()

** Ich hätte in der Lage sein sollen, die URLs beider Tweets mit Bildern und Videos mit diesem Code abzurufen. .. .. .. .. ** **.

Ich kann die Video-URL nicht wie erwartet abrufen

Ich kann nach Tweets suchen, aber ich stelle fest, dass einige Video-URLs abgerufen werden können und andere nicht.

Beim Versuch ist möglicherweise ein Fehler aufgetreten. .. ..

Als ich jeden Tweet gedruckt habe, habe ich einige Tweets ohne Extended_entities gefunden.

for tweet in tweets:
        print(tweet.text)
        #Ursache Teil
        # extened_Da es keine Entitäten gibt, tritt hier außer ein Fehler auf:Ich wollte gerade.
        print(tweet.extended_entities)
        try:
            media = tweet.extended_entities['media']

Als ich es nachgeschlagen habe, gab es viele Artikel.

Erhalten Sie Tweets mit mehr als 140 Zeichen https://qiita.com/hitsumabushi845/items/f7fd87106381fc65fc86

** Es scheint, dass extended_entities verschwindet, wenn die Tweet- und Video-URL 140 Zeichen überschreitet. ** **.

Ich habe lange gebraucht, um das zu bemerken. Oder besser gesagt, als ich es nachgeschlagen habe, war es sofort gelöst.

Lösungen

Das Hinzufügen von tweet_mode = 'erweitert' und include_entities = True zu den api.search-Parametern löst das Problem.

tweets = tweepy.Cursor(api.search, q=q).items(20)
tweets = tweepy.Cursor(api.search, q=q, 
    #Erweitern Sie hier den ausgelassenen Teil
    tweet_mode='extended', #Holen Sie sich alle ausgelassenen Tweets
    include_entities=True).items(20) #Holen Sie sich alle ausgelassenen Links

Ich konnte die URL des Videos abrufen, aber es wird ein Fehler ausgegeben. ..

AttributeError: 'Status' object has no attribute 'text'

Wenn tweet_mode auf erweitert gesetzt ist, ändert sich der Schlüsselname des Tweet-Textes anscheinend von Text zu Volltext.

for tweet in tweets:
        # text → full_text
        # print(tweet.text)
        print(tweet.full_text)
        print(tweet.extended_entities)
        try:
            media = tweet.extended_entities['media']

Geänderter Code

search_tweets.py


import os
import tweepy
from datetime import datetime, date, timedelta
from dateutil.relativedelta import relativedelta

consumer_key = os.getenv('TWITTER_CONSUMER_KEY')
consumer_secret = os.getenv('TWITTER_CONSUMER_SECRET')
access_token = os.getenv('TWITTER_ACCESS_TOKEN')
access_token_secret = os.getenv('TWITTER_ACCESS_TOKEN_SECRET')
bearer_token = os.getenv('TWITTER_ACCESS_TOKEN_SECRET')


#Suchen Sie auf Twitter nach Tweets zu Mayu Matsuoka und erhalten Sie die URL
def search_tweets():
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth)

    yesterday = datetime.strftime(datetime.today() - relativedelta(days=1), f"%Y-%m-%d")
    #Twitter-Suche unter der Bedingung, dass es Bilder und Videos von 10 oder mehr Likes gibt, gestern bis heute, 1 oder mehr Retweets, wobei Retweets weggelassen werden
    q = f'#Mayu Matsuoka ODER Mayu Matsuoka Filter:media exclude:retweets min_faves:10 since:{yesterday} min_retweets:1'

    #Der problematische Teil
    tweets = tweepy.Cursor(api.search, q=q).items(20)

    contents = []
    for tweet in tweets:
        print(tweet.full_text)
        print(tweet.extended_entities)
        try:
            media = tweet.extended_entities['media']
            for m in media:
                print(m)
                preview = m['media_url_https']
                if m['type'] == 'video':
                    origin = [variant['url'] for variant in m['video_info']
                              ['variants'] if variant['content_type'] == 'video/mp4'][0]
                else:
                    origin = m['media_url_https']

                #Formatiert zum Senden mit LINE Bot
                content = {'preview': preview, 'origin': origin, 'type': m['type']}
                contents.append(content)

            print('--------------------------------------------')
        except:
            print('Error')
            print('--------------------------------------------')
    return contents


if __name__ == "__main__":
    search_tweets()

abschließend

Für mich, der ein Fan von Mayu Matsuoka (allgemein bekannt als Mayura) ist und keine Zeit mehr hat, jeden Tag die Twitter-Timeline zu überprüfen, ist dieser LINE-Bot nur für mich, aber wenn Sie möchten, lese ich diesen Artikel. Wenn Sie ein Fan von Mayu Matsuoka sind, registrieren Sie sich bitte als Freund mit dem unten stehenden QR-Code! !! !!

Vielen Dank! !!

L.png

Auch wenn es Fehler in diesem Artikel gibt oder wenn Sie denken, dass Sie mehr tun sollten, kommentieren Sie bitte immer mehr! !!

Referenzartikel

[Python] Suchen und erhalten Sie Twitter-Tweets mit Tweepy https://vatchlog.com/tweepy-search/ Erhalten Sie Tweets mit mehr als 140 Zeichen https://qiita.com/hitsumabushi845/items/f7fd87106381fc65fc86 Holen Sie sich die Video-URL mit Python + Tweepy https://thinkami.hatenablog.com/entry/2017/11/02/062226

Recommended Posts

Eine Geschichte, die ich süchtig danach war, eine Video-URL mit Tweepy zu bekommen
Eine Geschichte, die mich süchtig nach dem Versuch machte, LightFM unter Amazon Linux zu installieren
Ich war süchtig danach, Cython mit PyCharm auszuprobieren, also machen Sie sich eine Notiz
Eine Geschichte, von der ich bei np.where süchtig war
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Eine Geschichte, die ich süchtig danach war, Lambda von AWS Lambda anzurufen.
Ein Hinweis, dem ich beim Erstellen einer Tabelle mit SQL Alchemy verfallen war
Ich war süchtig danach, eine Python-Venv-Umgebung mit VS Code zu erstellen
Ich erhalte einen UnicodeDecodeError, wenn ich versuche, mit Python sqlalchemy eine Verbindung zu Oracle herzustellen
Ein Hinweis, dem ich beim Ausführen von Python mit Visual Studio Code verfallen war
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Ich war süchtig danach, logging.getLogger mit Flask 1.1.x zu versuchen
[IOS] GIF-Animation mit Pythonista3. Ich war süchtig danach.
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Eine Geschichte, die von Azure Pipelines abhängig ist
Wovon ich süchtig war, als ich mit riesigen Dateien in einer Linux 32-Bit-Umgebung umging
Eine Geschichte, nach der ich süchtig war, als ich in Go nil als Funktionsargument angab
Ich war süchtig nach Multiprocessing + Psycopg2
Ein Memorandum beim automatischen Erwerb mit Selen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe ein Skript geschrieben, mit dem Sie mit hoher Geschwindigkeit mit AtCoder beginnen können!
Ein Hinweis, von dem ich süchtig war, als ich unter Linux einen Piepton machte
Beim Versuch, maec 4.0.1.0 mit pip zu installieren, wird eine Fehlermeldung angezeigt
Beachten Sie, dass ich süchtig danach war, mit Pythons mysql.connector über eine Webanwendung auf die Datenbank zuzugreifen
Ich war süchtig danach, keine E-Mail-Adresse von Google mit Django-Allauth-Authentifizierung zu erhalten
Ich habe versucht, mit Hy anzufangen
Ich war süchtig danach, mysqlclient zu installieren
Erhalten Sie Antworten auf bestimmte Tweets mit tweepy
Ich war auf dotCloud süchtig nach Flask
Was ich süchtig nach Python Autorun war
Verwenden Sie Python aus Java mit Jython. Ich war auch süchtig danach.
Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
[Python] Als ich versuchte, ein Dekomprimierungswerkzeug mit einer Zip-Datei zu erstellen, die ich gerade kannte, war ich süchtig nach sys.exit ()
Wovon ich beim Erstellen von Webanwendungen in einer Windows-Umgebung abhängig war
[Einführung in json] Nein, ich war süchtig danach. .. .. ♬
Ich möchte ein Spiel mit Python machen
Ich war vergebens, weil ich mit pybitflyer keine Bestellung für Eltern erhalten konnte
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Drei Dinge, von denen ich süchtig war, als ich Python und MySQL mit Docker verwendete
Ich erhalte einen UnicodeDecodeError, wenn ich mit mod_wsgi laufe
Die Geschichte des Versuchs, Tensorboard mit Pytorch zu verwenden
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich möchte mit Python in eine Datei schreiben
Zubu Amateur will Python starten
Beachten Sie, dass ich süchtig danach war, TensowFlow einzurichten
Eine Geschichte, die vorbereitet werden musste, wenn versucht wurde, ein Django-Tutorial mit einfachen Centos7 zu erstellen
Eine Geschichte, die fehlgeschlagen ist, als versucht wurde, das Suffix mit rstrip aus einem String zu entfernen
Ich kann die Uhrenquelle tsc nicht finden! ?? Die Geschichte des Versuchs, einen Kernel-Patch zu schreiben
Ich blieb stecken, als ich versuchte, einen relativen Pfad mit relative_to () in Python anzugeben
Eine Geschichte über einen Python-Anfänger, der versucht, Google-Suchergebnisse mithilfe der API abzurufen
Ein Anfänger versuchte, eine Strichzeichnung mit einem Kettenmesser zu färben. Ich konnte es schaffen.
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
So erhalten Sie einen angemeldeten Benutzer mit Djangos forms.py
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Eine Geschichte über das Ausprobieren eines (Golang +) Python-Monorepo mit Bazel
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte eine Zeichenkette mit Hiragana teilen