19

我正在浏览我们的网站分析,并且有大量 t.co 网址,这些网址是我们正在进行的促销活动的引荐来源。我试图弄清楚是否有一种方法可以通过 Twitter API 或其他方式将它们恢复到它们起源的原始推文。不过,我似乎找不到这样做的好方法,有吗?

4

6 回答 6

2

当 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 缩短服务,而不仅仅是 Twitter 的 t.co 网站。

我使用 Python 2.7 进行了测试,但上面的代码很可能适用于 Python 3.x。无论哪种方式,Requests 都是您的朋友,有关详细信息,请参阅文档:

http://docs.python-requests.org/en/latest/index.html

重定向和历史部分涵盖了这个例子。

我不知道如何通过 Twitter API 做到这一点,如果所有 URL 缩短都是自动的,这可能是不可能的。仍然基于 API 的解决方案仅适用于 t.co 地址,而上面的代码将适用于任何其他缩短的 URL 或任何重定向(例如 HTTP 301 或 302 响应代码)到另一个位置的 URL。

编辑(迟到总比没有好):在使用上面找到 t.co forward 实际指向的位置之后,可能会出现三四种类型的结果。最常见的是 OP 认为它们都是这样,缩短粘贴到推文中的 URL,公平地说,它们中的大多数都是这样。

其他可能性是它链接回推文本身,这通常只出现在一些相当长的推文中(不确定随着字符限制的增加,频率增加了多少);以及转发到独立于推文作者状态 URL 的状态 URL,这通常是嵌入式媒体(图像和视频)的情况;加上转发到正在引用推文或转发推文的推文的 URL。

鉴于 OP 的原始场景,这些内部 Twitter 使用都不会被看到,这里只关注“正常”转发。现在在 twitter.com 上搜索 t.co 地址对我们毫无用处,无论使用什么组合。

然而,搜索目标地址,如本答案开头的脚本所揭示的内容,则完全是另一回事。这将产生每条可公开访问并发布该链接的推文的结果。但是,也有一些缺点,包括:

  1. 搜索结果将包括使用其他转发服务的推文。
  2. 无法判断链接到该 URL 的所有推文是否生成了相同的 t.co 地址。
  3. 如果没有,则无法查看哪条推文使用了哪个 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.

然而,这已经是最好的了……无需为增强的数据访问付费 Twitter。

于 2013-09-21T20:25:42.690 回答
2
  1. 找出缩短的 URL 指向的原始 URL,例如使用http://www.getlinkinfo.com之类的服务
  2. 将该原始网址粘贴到 Google 的搜索框中

如果您正在专门寻找来自 Twitter 的参考资料,请执行以下操作:site:twitter.com "https://example.com"

于 2018-05-13T09:31:59.687 回答
1

如果您使用 Twitter 搜索 API,您可以找到提及 t.co URL 的推文(如果它们对您可见)并以这种方式找到链接。

这是一些用于执行此操作的 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
于 2019-04-28T09:18:14.030 回答
1

twitter 提供的公共 API 无法做到这一点。

如果我理解正确,您想查找最初嵌入特定 t.co 链接的推文。即 t.co 被关注时会解析到您的网站,而不是 twitter 推文。

于 2016-01-20T15:13:24.253 回答
0

引用您的页面的推文列表可在 Google Analytics 下直接菜单中Social networks找到。Trackbacks

于 2016-02-12T07:23:19.993 回答
-3

这是您找到原始推文的方式:

  1. 单击 t.co 链接以查找原始 URL
  2. 转到https://twitter.com/explore (#)
  3. 将链接复制并粘贴到“搜索推特”搜索框中
  4. 您将看到带有链接的推文
于 2019-09-18T06:09:49.667 回答