从我最喜欢的推文中获取 GIF/视频,并通过 API 在网页中显示



我的目标是:在网页中显示我最喜欢的推文中存在的所有 GIF/视频

为此,我正在使用Twitter REST API和这个php类(TwitterAPIExchange.php(

获取我最喜欢的推文

的代码,这会打印出我最喜欢的每条推文的文本

require_once('TwitterAPIExchange.php');

$settings = array(
    'oauth_access_token' => "XXXXXXX",
    'oauth_access_token_secret' => "XXXXXXX",
    'consumer_key' => "XXXXXXX",
    'consumer_secret' => "XXXXXXX"
);
$url = 'https://api.twitter.com/1.1/favorites/list.json';
$getfield = '?count=200&screen_name=XXXXX&include_entities=false';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
$result = $twitter->setGetfield($getfield)
             ->buildOauth($url, $requestMethod)
             ->performRequest();  
$result_array = json_decode($result , true);
for($i = 0 ; $i < count($result_array) ; $i++){
    echo $result_array[$i]["text"]."<br><br>";
}

现在我应该推断每个 GIF/视频的 http 地址(为此我没有问题(并查看它,问题是 GIF/视频的地址没有直接指向 GIF/视频

更新 1

现在我试了这个:

$url = 'https://api.twitter.com/1.1/favorites/list.json';
$getfield = '?count=200&screen_name=XXXXX&include_entities=true';
.....
.....
$app_video = array();
for($i = 0 ; $i < count($result_array) ; $i++){
    array_push($app_video, $result_array[$i]["entities"]["urls"][0]["expanded_url"]);
}

获取包含所有视频链接的数组

更新 2

现在,在推断所有视频的链接(更新 1(后,使用 file_get_contents 并使用 DomDocument ,我推断了

<video> <source ...> </ video>

从页面。

更新 3

这是我的最终解决方案

require_once('TwitterAPIExchange.php');

$settings = array(
    'oauth_access_token' => "XXXXXX",
    'oauth_access_token_secret' => "XXXXXX",
    'consumer_key' => "XXXXXX",
    'consumer_secret' => "XXXXXX"
);
$url = 'https://api.twitter.com/1.1/favorites/list.json';
$getfield = '?count=200&screen_name=XXXXX&include_entities=true';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
$result = $twitter->setGetfield($getfield)
             ->buildOauth($url, $requestMethod)
             ->performRequest();  
$result_array = json_decode($result , true);

for($i = 0 ; $i < count($result_array) ; $i++){
   $link = $result_array[$i]["entities"]["urls"][0]["expanded_url"];
   if(strpos($link,"twitter.com") !== false){
        $pageContent = file_get_contents($link , true);
        @$dom = new DOMDocument;
        @$dom->loadHTML($pageContent);
        $p = $dom->getElementsByTagName('video')->item(0);
        $source = $p->getElementsByTagName('source');
        $src = $source->item(0)->getAttribute("video-src");

        echo '<video name="media" loop="true" autoplay="true" src="'.$src.'">';
            echo '<source video-src="'.$src.'" type="video/mp4" class="source-mp4" src="'.$src.'">';
        echo '</video>';
   }
}

function get_inner_html( $node ) { 
    $innerHTML= ''; 
    $children = $node->childNodes; 
    foreach ($children as $child) { 
        $innerHTML .= $child->ownerDocument->saveXML( $child ); 
    } 
    return $innerHTML; 
} 

这个解决方案有效,但我认为我可以做得更好。这样,我必须加载每条推文的每一页,当然这种方法很慢。


你听说过雅虎管道吗?这是一种非常酷,快速和简单的蜘蛛网站信息的方法。设置管道后,您可以读取雅虎给你的rss/json。我知道这不是一个真正的答案,因为您只是外包了信息获取器,但最终您的代码会更快,更容易。我会把它写成评论,但遗憾的是,堆栈溢出不允许低于 50 声誉的评论。

https://pipes.yahoo.com/pipes/

我建议不要使用 api,而是使用 CURL 在推特上针对您的收藏夹列表发出请求。 我认为,如果您可以对 curl 请求并获取页面的 html,您可以将其过滤到源并在新页面中重新创建它。

有关 php 和 cURL 的信息:http://php.net/manual/en/book.curl.php要用 cURL 抓取的页面:https://twitter.com/favorites

最新更新