我已经集成了Twitter (Twitter OAuth)来获取特定公司帐户的最新提要,下面是我迄今为止所做的代码(https://tomelliott.com/php/authenticating-twitter-feed-timeline-oauth)。
<?php
require_once("twitteroauth/twitteroauth.php"); //Path to twitteroauth library
$twitteruser = "CompanyName";
$notweets = 3;
$consumerkey = "xxxxxxxx";
$consumersecret = "xxxxxxxx";
$accesstoken = "xxxxxxxx";
$accesstokensecret = "xxxxxxxx";
function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret)
{
$connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
return $connection;
}
$connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
$tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" . $twitteruser . "&count=" . $notweets);
?>
<?php foreach ($tweets as $current_tweet) { ?>
<div class="card">
<div class="card-body">
<div class="media">
<div class="media-body">
<h5 class="F-20 themeFontGrey MontSemBold text-uppercase">REGENCY CORPORATE</h5>
<p class="MontRegular themeFontGrey">
<?php
$date = $current_tweet->created_at;
echo date("F d Y, H:i A", strtotime($date));
?>
</p>
</div>
<?php
$twitt_url = '#';
$twitter_target = '';
if (!empty($current_tweet->id)) {
$twitt_url = 'https://twitter.com/' . $twitteruser . '/status/' . $current_tweet->id;
$twitter_target = 'target="_blank"';
}
?>
<a href="<?php echo $twitt_url; ?>" class="hovicon effect-5 news-icon" <?php echo $twitter_target; ?> >
<i class="fa fa-twitter"></i>
</a>
</div>
<p class="MontRegular themeFontGrey">
<?php echo $current_tweet->text; ?>
</p>
</div>
<?php if (!empty($current_tweet->entities->media[0]->media_url)) { ?>
<div class="newsImages">
<img src="<?php echo $current_tweet->entities->media[0]->media_url; ?>" alt="Images" height="20%" width="20%" />
</div>
<?php
} ?>
<hr />
</div>
<?php
} ?>这很好,我得到了3条最新的推特。现在我想在其中添加分页,因此我遵循了Twitter (https://developer.twitter.com/en/docs/basics/cursoring.html)提供的文档,下面是我用cursor更新的代码,我打印了数组(响应)。
<?php
require_once("twitteroauth/twitteroauth.php"); //Path to twitteroauth library
$twitteruser = "CompanyName";
$notweets = 3;
$cursor = -1;
$consumerkey = "xxxxxxxx";
$consumersecret = "xxxxxxxx";
$accesstoken = "xxxxxxxx";
$accesstokensecret = "xxxxxxxx";
function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret)
{
$connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
return $connection;
}
$connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
$tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" . $twitteruser . "&count=" . $notweets . "&cursor=" . $cursor);
echo '<pre>';
print_r($tweets);
exit;
?>如您所见,这里我添加了$cursor = -1;,并将我的api目标url更新到$tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" . $twitteruser . "&count=" . $notweets . "&cursor=" . $cursor);,传递了cursor值。
这里我得到了3个最近的推文,然而,根据在上述链接(https://developer.twitter.com/en/docs/basics/cursoring.html)的文档中提到的,您应该得到如下的响应。
{
"ids": [
385752029,
602890434,
...
333181469,
333165023
],
"next_cursor": 1374004777531007833,
"next_cursor_str": "1374004777531007833",
"previous_cursor": 0,
"previous_cursor_str": "0"
}我也尝试过更新所要求的提要url。
$tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" . $twitteruser . "&cursor=" . $cursor);但到目前为止,我还没有得到任何像next_cursor这样的密钥才能继续前进。有人能引导我吗,我在这里做错了什么,我应该怎么做才能从这里开始分页?
如有任何帮助或建议,将不胜感激。
谢谢
发布于 2018-05-30 05:00:04
好的伙计们,
我找到了自己解决这个问题的方法,使用我已经使用过的库来集成ajax分页。我就是这样做的。
我创造了两页。一种是发送ajax请求以获取结果中的数据(page1.php),另一种是基于ajax请求获取
page1.php
<div class="col-xs-12 twitter_posts">
</div>
<script>
$( document ).ready(function() {
$.ajax({
type: 'POST',
url: "twitter_posts_ajax.php",
dataType: "html",
success: function(resultData) {
console.log(resultData);
$( ".twitter_posts" ).html(resultData);
}
});
$(document).on('click', '.twitter_posts_anchor', function(){
var twitterpagenumber = $(this).data('twitterpagenumber');
var myKeyVals = { twitterInpage : twitterpagenumber}
$.ajax({
type: 'POST',
url: "twitter_posts_ajax.php",
data: myKeyVals,
dataType: "html",
success: function(resultData) {
console.log(resultData);
$( ".twitter_posts" ).html(resultData);
$('html, body').animate({
scrollTop: $( '.twitter_posts' ).offset().top
}, 500);
}
});
});
});twitter_posts_ajax.php
<?php
session_start();
require_once("twitteroauth/twitteroauth.php"); //Path to twitteroauth library
$twitteruser = "CompanyName";
$limit = 10; //per page
$consumerkey = "xxxxxxxx";
$consumersecret = "xxxxxxxx";
$accesstoken = "xxxxxxxx";
$accesstokensecret = "xxxxxxxx";
function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret)
{
$connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
return $connection;
}
$connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
if (!isset($_SESSION['twitter_total_pages'])) {
// Counting all tweets first
$count_all_tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" . $twitteruser);
$twitter_total_pages = ceil(count($count_all_tweets) / $limit);
$_SESSION['twitter_total_pages'] = $twitter_total_pages;
} else {
$twitter_total_pages = $_SESSION['twitter_total_pages'];
}
$twitterInpage = !empty($_POST['twitterInpage']) ? (int)$_POST['twitterInpage'] : 1;
$totalPages = $_SESSION['twitter_total_pages']; //calculate total pages
$twitterInpage = max($twitterInpage, 1); //get 1 page when $_GET['page'] <= 0
$twitterInpage = min($twitterInpage, $totalPages); //get last page when $_GET['page'] > $totalPages
$offset = ($twitterInpage - 1) * $limit;
if ($offset < 0) $offset = 0;
$link = '?twitterInpage=%d';
$pagerContainer = '<div style="width: 300px;" class="linkedin_pagination">';
if ($totalPages != 0) {
if ($twitterInpage == 1) {
$pagerContainer .= '';
} else {
$page_number = $twitterInpage - 1;
$pagerContainer .= sprintf('<a href="javascript:void(0)" style="color: #c00" class="twitter_posts_anchor" data-twitterpagenumber=' . $page_number . '> « prev page</a>');
}
$pagerContainer .= ' <span> page <strong>' . $twitterInpage . '</strong> from ' . $totalPages . '</span>';
if ($twitterInpage == $totalPages) {
$pagerContainer .= '';
} else {
$page_number = $twitterInpage + 1;
$pagerContainer .= sprintf('<a href="javascript:void(0)" style="color: #c00" class="twitter_posts_anchor" data-twitterpagenumber=' . $page_number . '> next page » </a>');
}
}
$pagerContainer .= '</div>';
if ($twitterInpage == $_SESSION['twitter_total_pages']) {
$twitter_page_number = $_SESSION['twitter_total_pages'];
} else {
$twitter_page_number = ($page_number - 1);
}
$tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" . $twitteruser . "&page=" . $twitter_page_number . "&count=" . $limit);
?>
<?php foreach ($tweets as $current_tweet) { ?>
<div class="card">
<div class="card-body">
<div class="media">
<div class="newsIcon">
<img src="img/theme-logo-icon.png" alt="logo" />
</div>
<div class="media-body">
<h5 class="F-20 themeFontGrey MontSemBold text-uppercase">REGENCY CORPORATE</h5>
<p class="MontRegular themeFontGrey">
<?php
$date = $current_tweet->created_at;
echo date("F d Y, H:i A", strtotime($date));
?>
</p>
</div>
<?php
$twitt_url = '#';
$twitter_target = '';
if (!empty($current_tweet->id)) {
$twitt_url = 'https://twitter.com/' . $twitteruser . '/status/' . $current_tweet->id;
$twitter_target = 'target="_blank"';
}
?>
<a href="<?php echo $twitt_url; ?>" class="hovicon effect-5 news-icon" <?php echo $twitter_target; ?> >
<i class="fa fa-twitter"></i>
</a>
</div>
<p class="MontRegular themeFontGrey">
<?php echo $current_tweet->text; ?>
</p>
</div>
<?php if (!empty($current_tweet->entities->media[0]->media_url)) { ?>
<div class="newsImages">
<img src="<?php echo $current_tweet->entities->media[0]->media_url; ?>" alt="Images" />
</div>
<?php
} ?>
</div>
<?php
} ?>
<?php echo $pagerContainer; ?>在这里,如您所见,我们有两个页面,page1.php,我通过它传递ajax请求,从ajax加载数据
我还在twitter_posts_ajax.php中使用session_start()只获取了一次time的总数,这样我就不需要每次都重新计算。我还使用了offset和limit作为分页,这与ajax很好地配合。
希望这能有所帮助。
发布于 2018-05-25 06:59:53
参考链接::Github ::https://github.com/dineshghule321/codebird-php
从PHP代码中使用Codebird连接到Twitter REST API、流API、Collections、TON (Object Nest) API和Twitter Ads API --所有这些都只使用一个库。代码库支持完整的3路OAuth以及应用程序专用的auth。
发布于 2018-05-30 04:52:45
由于Twitter的实时性,标准分页方法不适合像GET statuses/user_timeline这样的方法。
https://developer.twitter.com/en/docs/tweets/timelines/guides/working-with-timelines
根据您的请求,只有当您需要检索一个非常大的数据,而不是一次全部检索某些方法(例如GET friends/ids )时,才会适用该请求,在这些方法中,您可以将cursor作为一个参数发送。换句话说,该方法需要支持cursor作为参数。
https://stackoverflow.com/questions/50460958
复制相似问题