Twitter 如何将t.co URL反向到原始Tweet?

Twitter 如何将t.co URL反向到原始Tweet?,twitter,url-shortener,short-url,Twitter,Url Shortener,Short Url,我正在浏览我们的网站分析,有大量的t.co URL是我们正在做的促销活动的参考者。我试图找出是否有办法通过推特API或其他方式,将这些内容还原到它们最初发布的推特。不过,我似乎找不到一个好的方法来做这件事,是吗?当t.co转发指向一条推文时,它会转到该推文的网页,该网页的HTML将包含规范URL 获取此信息的丑陋方式是使用wget或curl获取HTML目的地,该目的地将包含您最初tweet的URL 更好的方法是使用Python模块Requests(您需要先安装此模块)。下面是一个快速的命令行脚本

我正在浏览我们的网站分析,有大量的t.co URL是我们正在做的促销活动的参考者。我试图找出是否有办法通过推特API或其他方式,将这些内容还原到它们最初发布的推特。不过,我似乎找不到一个好的方法来做这件事,是吗?

当t.co转发指向一条推文时,它会转到该推文的网页,该网页的HTML将包含规范URL

获取此信息的丑陋方式是使用wget或curl获取HTML目的地,该目的地将包含您最初tweet的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网站

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

重定向和历史记录部分介绍了此示例

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

编辑(比不编辑好一点):使用上面的方法找到t.co转发的实际指向后,将有三到四种可能的结果。最常见的是,它是OP认为他们都是的东西,是粘贴到推特上的URL的缩写,公平地说,这就是他们中的大多数

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

鉴于OP最初的场景,这些内部推特用法都不应该被看到,这里只关注“正常”的转发。现在,无论使用何种组合,在twitter.com上搜索t.co地址都毫无用处

然而,搜索目标地址是另一回事,就像这个答案开头的脚本一样。这将产生每个推文的结果,这些推文可以公开访问,并且发布了链接。但是,也存在一些缺点,包括:

  • 搜索结果将包括使用其他转发服务的推文
  • 无法判断链接到该URL的所有tweet是否生成了相同的t.co地址
  • 如果没有,就无法确定哪个推特使用了哪个t.co转发
  • 然而,结合web服务器上完整的推荐人日志,可能会进一步缩小范围。假设推荐人URL报告推特的URL,而不仅仅是twitter.com。然而,这更可能取决于点击链接的人的方式(即,他们只是在流中看到tweet,还是扩展到足以显示其完整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付费。

    这在Twitter提供的公共API中是不可能的


    如果我理解正确,您希望找到一条最初嵌入了特定t.co链接的tweet。i、 e.跟踪t.co后,会解析到您的站点,而不是twitter推文。

    引用您页面的推文列表可直接在Google Analytics的
    社交网络
    Trackbacks
    菜单下找到

  • 找出缩短后的URL指向的原始URL,例如,通过使用类似
  • 将原始URL粘贴到谷歌的搜索框中

  • 如果你特别想从Twitter上寻找推荐人,可以这样做:
    site:Twitter.com”https://example.com“

    如果您使用Twitter搜索API,您可以找到提到t.co URL的推文(如果您可以看到),并通过这种方式找到链接

    下面是一些用于执行此操作的Python,摘自:

    从请求\u oauthlib导入OAuth1Session
    sess=OAuth1会话(
    client\u key=TWITTER\u CONSUMER\u key,
    client\u secret=TWITTER\u CONSUMER\u secret,
    资源\所有者\密钥=TWITTER \访问\令牌,
    resource\u owner\u secret=TWITTER\u ACCESS\u TOKEN\u secret
    )
    def find_tweets_使用_tco(tco_url):
    """
    给定一个缩短的t.co URL,为使用此URL的推文返回一组URL。
    """
    #看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,
    “计数”:100,
    “包含实体”:真
    }
    )
    statuses=resp.json()[“statuses”]
    tweet_url=set()
    对于状态中的状态:
    #在Twitter API中,转发显示为一种新状态,但我们只是
    #对原始推文感兴趣。如果这是转发,请仔细查看
    #与原文一致。
    尝试:
    tweet=状态[“转发状态”]
    除KeyError外:
    tweet=状态
    #如果这条推特