我的目标是:在网页中显示我最喜欢的推文中存在的所有 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