如何使用新的Twitter API在CakePHP元素的Twitter页面中显示5条推文? 那有插件吗?很抱歉,如果这是一个愚蠢的问题,但我之前使用的是Twitter API。
答案 0 :(得分:1)
如果您感兴趣,我已经创建了一个可以轻松完成此操作的插件:https://github.com/voycey/CakePHP-Twitter-API-v1.1-Full
答案 1 :(得分:0)
我不知道一个可以使用新API的CakePHP插件,但是有一个很好的普通PHP库很容易使用 - https://github.com/jublonet/codebird-php
您需要在Twitter中创建一个应用,以获取您的消费者密钥和令牌。
以前是一些相关的代码片段,我之前用它来使用CakePHP应用程序:
在app/Config/bootstrap.php
中(您需要缓存推文,而不是每次请求都获取推文)
Cache::config('three_hour_config', array(
'engine' => 'File', //[required]
'duration'=> '+3 hours', //[optional]
'probability'=> 100, //[optional]
'mask' => 0777, // [optional] permission mask to use when creating cache files
));
在您的控制器中 - 也许AppController.php
:
private function __setLatestTweets() {
$rawTweets = Cache::read('rawTweets', 'three_hour_config' );
if (empty($rawTweets)) {
// from https://github.com/jublonet/codebird-php
require_once (APP . 'Vendor' . DS . 'jublonet' . DS . 'codebird-php' . DS . 'src' . DS . 'codebird.php');
\Codebird\Codebird::setConsumerKey('********', '*********');
$cb = \Codebird\Codebird::getInstance();
$cb->setToken('*****-**********', '*********');
$rawTweets = (array)$cb->statuses_userTimeline(array('count' => 1));
// remove the last key, which is not numeric.
// If we don't remove it, it's treated like a normal tweet and creates errors
unset($rawTweets['httpstatus']);
Cache::write('rawTweets', $rawTweets, 'three_hours');
}
$this->set('rawTweets',$rawTweets);
}
然后我写了一个助手来帮助我格式化它们:/app/View/Helper/TwitterHelper.php
<?php
/* /app/View/Helper/TwitterHelper.php */
App::uses('AppHelper', 'View/Helper');
class TwitterHelper extends AppHelper {
public $helpers = array('Time');
public function formatTweets($tweets) {
$latestTweets = '';
foreach ($tweets as $tweet) {
if ($tweet->retweeted) {
$tweetText = $tweet->retweeted_status->text;
} else {
$tweetText = $tweet->text;
}
// Convert twitter Usernames and links to Hyperlinks
$tweetcontent = '<div class="tweet_content">' . $this->linkify($tweetText) . '</div>';
$tweetDate = strtotime($tweet->created_at);
$singleTweet = $tweetcontent . '<div class="tweet_footer">' .
$this->Time->timeAgoInWords( $tweetDate ) .
' ⋅ ' .
'<a href="https://twitter.com/intent/tweet?in_reply_to=' . number_format($tweet->id, 0, '', '') . '" class="twtr_reply" target="_blank">reply</a>' .
' ⋅ ' .
'<a href="https://twitter.com/intent/retweet?tweet_id=' . number_format($tweet->id, 0, '', '') . '" class="twtr-rt" target="_blank">retweet</a>' .
' ⋅ ' .
'<a href="https://twitter.com/intent/favorite?tweet_id=' . number_format($tweet->id, 0, '', '') . '" class="twtr-fav" target="_blank">favorite</a>' .
'</div>';
$latestTweets .= "<div class=\"single_tweet\"> $singleTweet </div>";
}
return $latestTweets;
}
/**
* Credit Jeremy Parrish http://rrish.org/
*/
public function linkify($statusText) {
// linkify URLs
$statusText = preg_replace(
'/(https?:\/\/\S+)/',
'<a target="_blank" href="\1">\1</a>',
$statusText
);
// linkify twitter users
$statusText = preg_replace(
'/(^|\s)@(\w+)/',
'\1@<a target="_blank" href="http://twitter.com/\2">\2</a>',
$statusText
);
// linkify tags
$statusText = preg_replace(
'/(^|\s)#(\w+)/',
'\1#<a target="_blank" href="http://search.twitter.com/search?q=%23\2">\2</a>',
$statusText
);
return $statusText;
}
}
然后在你看来你会有类似的东西:
<h4>Latest from Twitter</h4>
<div class="tweets_container">
<?php echo $this->Twitter->formatTweets($rawTweets); ?>
</div>