【问题标题】:Replace T.co with full twitter link using API使用 API 将 T.co 替换为完整的 Twitter 链接
【发布时间】:2016-07-04 15:47:30
【问题描述】:

我目前正在使用 EpiTwitter API 来获取推文并将它们存储在数据库中,但是我想替换给定推文中的任何“T.co”链接并用完整链接替换它们。正则表达式是我需要一些帮助来确定如何替换链接的地方。

Twitter 通过 urls 实体返回 URL。

"urls": [{
  "url": "https:\/\/t.co\/XdXRudPXH5",
  "expanded_url": "https:\/\/blog.twitter.com\/2013\/rich-photo-experience-now-in-embedded-tweets-3",
  "display_url": "blog.twitter.com\/2013\/rich-phot\u2026",
  "indices": [80, 103]
}],

我目前正在调用 API 并像这样循环浏览推文:

$resp = $twitterObj->get('/statuses/user_timeline.json', array('screen_name'=>$row['screenname']));

    foreach($resp->response as $tweet)
    {                       
        foreach($tweet['entities']['urls'] as $url_type) 
        {
            if(preg_match('/https:\/\/t.co\/[^\s]+/', $url_type['url']))
            {
                 $processedtweet = str_replace($url_type['url'], $url_type['expanded_url'], $tweet['text']);        
            }                           
        }
    }

用于检查它的正则表达式是 T.co 链接并将其替换为链接 expanded_url 或 display_url 实体是我需要帮助的地方,因为 preg_match 语句未正确评估 T.co 链接。

编辑 我使用链接对此进行了测试:https://t.co/XdXRudPXH5 并且它评估正确,但是 twitter API 在整个链接中使用反斜杠显示它。当我的代码开始阅读 url 时是否需要它们?基本上我的正则表达式必须考虑所有的反斜杠。

谢谢。

【问题讨论】:

    标签: php regex twitter


    【解决方案1】:

    我将使用 strpos 而不是 preg_match

    if ( strpos(url_type['url'],'t.co') !== false) 
    

    【讨论】:

    • 我确实想到了这一点,但是如果有一个像 rust.co 或类似的 URL 怎么办?我不太了解 twitter API,但如果返回的链接不是 T.co,这可能会有问题。
    • 我想我可以通过在进入 preg_match 函数之前执行stripslashes($url_type['url']) 来避免这个问题,它会验证它。
    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 2017-04-10
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2011-04-17
    • 2013-02-08
    相关资源
    最近更新 更多