Rozszerzone Tweety¶
Te informacje uzupełniają Dokumentację aktualizacji tweetów Twittera.
Wprowadzenie¶
On May 24, 2016, Twitter announced changes to the way that replies and URLs are handled and published plans around support for these changes in the Twitter API and initial technical documentation describing the updates to Tweet objects and API options.[1] On September 26, 2017, Twitter started testing 280 characters for certain languages,[2] and on November 7, 2017, announced that the character limit was being expanded for Tweets in languages where cramming was an issue.[3]
Standardowe metody API¶
Każda metoda tweepy API
, która zwraca obiekt Status akceptuje nowy parametr tweet_mode
. Poprawne wartości dla tego parametru to compat
oraz extened
, które dają odpowiednio tryb kompatybilności oraz tryb rozszerzony. Domyślny tryb (gdy nie ma podanego parametru) to tryb kompatybilności.
Tryb kompatybilności¶
Domyślnie, używając trybu kompatybilności, atrybut text
obiektu Status zwrócony przez metody tweepy API
jest obcięty do 140 znaków, tak jak jest to wymagane. Gdy zachodzi obcinanie, atrybut truncated
obiektu Status jest True
i tylko jednostki, które są całkowicie zawarte w dostępnych 140 znakach będa zawarte w atrybucie entities
. Zostanie także zaobserwowane to, że atrybut ``text` obiektu Satus jest obcięty, ponieważ będzie on zakończony elipsą, spacją oraz skróconym permamentnym URL do tweeta.
Tryb rozszerzony¶
Używając trybu rozszerzonego, atrybut text
obiektu Status zwrócony przez metody tweepy API
jest zastąpiony przez atrybut full_text
, który zawiera cały, nieobcięty tekst tweeta. Atrybut truncated
obiektu Status jest False
a atrybut entities
zawiera wszystkie jednostki. Dodatkowo, obiekt Status będzie posiadał atrybut display_text_range
, szyk dwóch indeksów wskaźników kodu Unicode, które identyfikują włączny start i wyłączny koniec wyświetlanej zawartości tweeta.
Przesyłanie strumieniowe¶
Domyśnie, obiekty Status ze strumieni mogą zawierać atrybut extended_tweet
reprezentujący równowartość pól w nieprzetworzonych danych/właściwych danych dla tweeta. Ten atrybut/pole będzie istnieć tylko dla rozszerzonych tweeetów zawierających słownik podpól. Podpole/klucz full_text
tego słownika będzie zawierać pełny, nieobcięty tekst tweeta a podpole/klucz entities
będzie zawierać pełny zbiór jednostek. Jeżeli pojawią się rozszerzone jednostki to podpole/klucz extended_entities
będzie zawierać pełen ich zbiór. Dodatkowo, podpole/klucz display_text_range
będzie zawierać szyk dwóch indeksów wskaźników kodu Unicode, które identyfikują włączny start i wyłączny koniec wyświetlanej zawartości tweeta.
Obsługa retweetów¶
Używając rozszerzonego trybu dla retweetów, atrybut full_text
obiektu Status może być skrócony poprzez elipsę zamiast zawierania całości tekstu retweeta. Jednakże, ponieważ atrybut retweeted_status
(dla obiektu Status, który jest retweetem) jest sam w sobie obiektem Statusu, to atrybut full_text
dla obiektu Status retweeta, może być użyty zamiennie.
Działa to podobnie dla obiektu/danych właściwych, które są retweetami ze strumieni. Słownik od atrybutu/pola extended_tweet
zawiera podpole/klucz full_text
, który może być obcięty elipsą. Zamiast tego może być użyty atrybut/pole extended_tweet
Statusu retweeta (od atrybutu/pola retweeted_status
).
Przykłady¶
Posiadając istniejący obiekt tweepy.API
oraz id
dla tweeta, można wyświetlić cały tekst tweeeta lub jeżeli jest to retweet, cały tekst retweetowanego tweeta:
status = api.get_status(id, tweet_mode="extended")
try:
print(status.retweeted_status.full_text)
except AttributeError: # Not a Retweet
print(status.full_text)
Jeżeli status
to retweet to status.full_text
może być obcięty.
Ten odbiornik zdarzeń dla StreamListener
wyświetla pełny tekst tweeta, lub jeżeli jest to retweet, pełny tekst retweetowanego tweeta:
def on_status(self, status):
if hasattr(status, "retweeted_status"): # Check if Retweet
try:
print(status.retweeted_status.extended_tweet["full_text"])
except AttributeError:
print(status.retweeted_status.text)
else:
try:
print(status.extended_tweet["full_text"])
except AttributeError:
print(status.text)
Jeżeli status
to retweet to nie będzie on posiadał atrybutu extended_tweeet
a status.text
moze być obcięty.
Przypisy
[1] | https://twittercommunity.com/t/upcoming-changes-to-simplify-replies-and-links-in-tweets/67497 |
[2] | https://twittercommunity.com/t/testing-280-characters-for-certain-languages/94126 |
[3] | https://twittercommunity.com/t/updating-the-character-limit-and-the-twitter-text-library/96425 |