Как я могу перевести URL t.co в исходный твит?
Я просматриваю аналитику нашего сайта и загружаю URL-адреса t.co, которые ссылались на продвижение, которое мы делали. Я пытаюсь выяснить, есть ли способ вернуть их обратно в исходный твит, где они были созданы, через API Twitter или другими способами. Я не могу найти хороший способ сделать это, хотя, есть ли?
7 ответов
Это невозможно с общедоступными API, которые предоставляет твиттер.
Если я правильно понимаю, вы хотите найти твит, в который изначально была вставлена конкретная ссылка на t.co. То есть t.co, если его использовать, разрешается на ваш сайт, а не в твиттере.
Когда переадресация t.co указывает на твит, он переходит на веб-страницу для этого твита, а HTML-код для страницы будет включать канонический URL.
Уродливый способ получить эту информацию - использовать wget или curl для захвата HTML-адреса, который будет включать в себя URL-адрес вашего первоначального твита.
Лучший способ сделать это с помощью модуля Python, Requests (сначала вам нужно будет установить этот модуль). Вот быстрый скрипт командной строки, который сделает это:
#!/usr/bin/env python
import requests
shorturl = raw_input("Enter the shortened URL in its entirety: ")
r = requests.get(shorturl)
print("""
The shortened URL forwards to:
%s
""" % r.url)
Этот код будет работать на любом из этих сервисов сокращения URL, а не только на сайте t.co в Twitter.
Я провел тестирование на Python 2.7, но есть вероятность, что приведенный выше код будет работать с Python 3.x. В любом случае, Requests - ваш друг, подробности смотрите в документации:
http://docs.python-requests.org/en/latest/index.html
Раздел перенаправления и истории охватывает этот пример.
Я не знаю, как это сделать через Twitter API, и это может быть невозможно, если все сокращения URL выполняются автоматически. Тем не менее решение на основе API будет работать только с адресами t.co, в то время как приведенный выше код будет работать с любым другим сокращенным URL-адресом или любым URL-адресом, который перенаправляет (например, HTTP 301 или 302 коды ответа) в другое место.
Редактировать (лучше чуть позже, чем никогда): после того, как вы использовали вышеупомянутое, чтобы найти, куда на самом деле указывает форвард t.co, будет три или четыре типа возможных результатов. Наиболее распространенным является то, что это то, что, по мнению ОП, является сокращением до URL-адреса, вставленного в твит, и, честно говоря, именно таковым является большинство из них.
Другие возможности заключаются в том, что он ссылается на сам твит, обычно он появляется только с некоторыми довольно длинными твитами (не уверен, насколько это увеличивается по частоте с увеличением предела персонажа); а также переадресация на URL-адрес статуса, независимого от URL-адреса статуса автора твита, что часто имеет место со встроенными медиафайлами (изображения и видео); плюс переадресация на URL твита, который цитируется в твиттере или ретвиттере.
Принимая во внимание исходный сценарий OP, ни одно из этих внутренних применений Twitter никогда не должно быть замечено, и здесь важна только "нормальная" пересылка. Теперь поиск адреса t.co на twitter.com нам не помогает, независимо от того, какие комбинации используются.
Однако поиск целевого адреса, который обнаруживается с помощью сценариев, подобных тому, который содержится в начале этого ответа, - это совсем другое дело. Это даст результаты каждого твита, который является общедоступным и который разместил эту ссылку. Есть, однако, некоторые недостатки, в том числе:
- Результаты поиска будут включать твиты, где также использовались другие услуги пересылки.
- Невозможно определить, генерировали ли все твиты, связанные с этим URL, один и тот же адрес t.co или нет.
- Если нет, то нет способа узнать, какой форвард t.co был использован каким твитом.
Тем не менее, в сочетании с полными журналами реферера на веб-сервере, возможно, будет возможно сузить это далее. Предполагая, что URL-адрес реферера сообщает URL твита, а не просто twitter.com. Однако это, скорее всего, будет определяться тем, как человек, нажимающий на ссылку, делал это (т. Е. Видел ли он просто твит в потоке или достаточно расширил его, чтобы отобразить полный URL).
Я подозреваю, что эффективность журналов реферера будет спорадической и, вероятно, будет снижаться на смартфонах и планшетах, где используемые приложения с меньшей вероятностью будут иметь расширенные твиты таким образом, чтобы затем передавать эти данные сторонним веб-сайтам.
#!/usr/bin/env python3
import requests
import urllib.parse
shorturl = input("Enter the shortened URL in its entirety: ")
r0 = requests.get(shorturl, verify=True)
t0 = "https://twitter.com/search?f=tweets&q="
t1 = urllib.parse.quote_plus(r0.url)
r1 = requests.get("{0}{1}".format(t0, t1), verify=True)
# the results will be in r1.content
# there may be some benefit from cutting the http:// or
# https:// from r0.url before creating the quoted string in t1.
Это, однако, так же хорошо, как и получается... не платя Твиттеру за расширенный доступ к данным.
- Узнайте, на какой оригинальный URL указывает сокращенный URL-адрес, например, с помощью такой службы, как http://www.getlinkinfo.com/
- Вставьте этот оригинальный URL в окно поиска Google
Если вы специально ищете ссылки из Twitter, сделайте так: site:twitter.com "https://example.com"
Если вы используете API поиска в Твиттере, вы можете найти твиты, в которых упоминается URL t.co (если они вам видны), и найти ссылку таким образом.
Вот немного Python для этого, взятый из более длинного поста в блоге, который я написал:
from requests_oauthlib import OAuth1Session
sess = OAuth1Session(
client_key=TWITTER_CONSUMER_KEY,
client_secret=TWITTER_CONSUMER_SECRET,
resource_owner_key=TWITTER_ACCESS_TOKEN,
resource_owner_secret=TWITTER_ACCESS_TOKEN_SECRET
)
def find_tweets_using_tco(tco_url):
"""
Given a shortened t.co URL, return a set of URLs for tweets that use this URL.
"""
# See https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets.html
resp = sess.get(
"https://api.twitter.com/1.1/search/tweets.json",
params={
"q": tco_url,
"count": 100,
"include_entities": True
}
)
statuses = resp.json()["statuses"]
tweet_urls = set()
for status in statuses:
# A retweet shows up as a new status in the Twitter API, but we're only
# interested in the original tweet. If this is a retweet, look through
# to the original.
try:
tweet = status["retweeted_status"]
except KeyError:
tweet = status
# If this tweet shows up in the search results for a reason other than
# "it has this t.co URL as a short link", it's not interesting.
if not any(u["url"] == tco_url for u in tweet["entities"]["urls"]):
continue
url = "https://twitter.com/%s/status/%s" % (
tweet["user"]["screen_name"], tweet["id_str"]
)
tweet_urls.add(url)
return tweet_urls
Твиттерt.co
Сокращатель URL-адресов просто перенаправляет на другой URL-адрес в ответе HTTP. Чтобы найти этот другой URL-адрес, вам нужно только получить URL-адрес t.co и посмотреть наlocation
заголовок в ответе. можно сделать это:
curl -v <t.co URL>
Чтобы извлечь только URL из всей этой информации, вы можете использовать:
curl -w "%{redirect_url}" <t.co URL>
Опция -w сообщаетcurl
выводить толькоredirect_url
переменная.
Список твитов, которые ссылались на ваши страницы, доступен в разделе Social networks
а потом Trackbacks
меню прямо в Google Analytics.
Вот как вы находите исходный твит:
- Щелкните ссылку t.co, чтобы найти исходный URL
- Перейдите на https://twitter.com/explore (#)
- Скопируйте и вставьте ссылку в окно поиска "search twitter"
- Вы увидите твиты со ссылкой