public function GetTwitter() {
# Load Twitter class
//require_once('TwitterOAuth.php');
require_once (Director::baseFolder() . '/TwitterOAuth.php');
# Create the connection
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
$tweets = $twitter->get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=DhakaArtSummit&count=1');
# Example output
if(!empty($tweets)) {
foreach($tweets as $tweet) {
# Access as an object
@$tweetText = $tweet["text"];
# Make links active
$tweetText = preg_replace("#(http://|(www\.))(([^\s<]{4,68})[^\s<]*)#", '<a href="http://$2$3" target="_blank">$1$2$4</a>', $tweetText);
# Linkify user mentions
$tweetText = preg_replace("/@(w+)/", '<a href="http://www.twitter.com/$1" target="_blank">@$1</a>', $tweetText);
# Linkify tags
$tweetText = preg_replace("/#(w+)/", '<a href="http://search.twitter.com/search?q=$1" target="_blank">#$1</a>', $tweetText);
return $tweetText;
}
}
}
我已经在php文件的控制器中编写了代码,并想在ss文件上打印返回值。在我写的ss文件上
`<% loop GetTwitter %><p> $tweetText </p><% end_loop %>`
任何人都可以帮助我破解此代码。接受任何帮助。
一种方法是创建一个ArrayList
,将所有tweet添加为ArrayData
(即使在示例中仅返回一条tweet),然后返回ArrayList进行循环。
代码
public function getLatestTweets() {
require_once (Director::baseFolder() . '/TwitterOAuth.php');
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
$tweets = $twitter->get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=DhakaArtSummit&count=1');
if(!empty($tweets)) {
$output = new ArrayList();
foreach ($tweets as &$tweet) {
$tweet['TweetText'] = $this->tweetConvert(
isset($tweet['retweeted_status']) ? $tweet['retweeted_status']['text'] : $tweet['text']
);
$output->push(new ArrayData($tweet));
}
return $output;
}
return false;
}
/**
* Function to convert links, mentions and hashtags: http://goo.gl/ciKGs
*/
function tweetConvert($tweet_string) {
$tweet_string = preg_replace("/((http(s?):\/\/)|(www\.))([\w\.]+)([a-zA-Z0-9?&%.;:\/=+_-]+)/i", "<a href='http$3://$4$5$6' target='_blank'>$2$4$5$6</a>", $tweet_string);
$tweet_string = preg_replace("/(?<=\A|[^A-Za-z0-9_])@([A-Za-z0-9_]+)(?=\Z|[^A-Za-z0-9_])/", "<a href='http://twitter.com/$1' target='_blank'>$0</a>", $tweet_string);
$tweet_string = preg_replace("/(?<=\A|[^A-Za-z0-9_])#([A-Za-z0-9_]+)(?=\Z|[^A-Za-z0-9_])/", "<a href='http://twitter.com/search?q=%23$1' target='_blank'>$0</a>", $tweet_string);
}
模板
<% loop $LatestTweets %>
<p>$TweetText</p>
<% end_loop %>
以下是我在SilverStripe 3.1中经常使用的代码,用于在整个网站上获取和显示Twitter feed。这对您来说可能有些矫kill过正,但可能会帮助您或其他一些解决此类问题的人。
我将Twitter设置存储在中SiteConfig
。要做到这一点,我延长SiteConfig
了TwitterFeedSiteConfig
DataExtension
。
TwitterFeedSiteConfig.php
class TwitterFeedSiteConfig extends DataExtension {
private static $db = array(
'TwitterConsumerKey' => 'Varchar(255)',
'TwitterConsumerSecret' => 'Varchar(255)',
'TwitterAccessToken' => 'Varchar(255)',
'TwitterAccessTokenSecret' => 'Varchar(255)',
'TwitterUsername' => 'Varchar(255)',
'TwitterTweetCount' => 'Int'
);
public function updateCMSFields(FieldList $fields) {
$fields->addFieldToTab('Root.TwitterFeed', TextField::create('TwitterConsumerKey', 'Consumer Key'));
$fields->addFieldToTab('Root.TwitterFeed', TextField::create('TwitterConsumerSecret', 'Consumer Secret'));
$fields->addFieldToTab('Root.TwitterFeed', TextField::create('TwitterAccessToken', 'Access Token'));
$fields->addFieldToTab('Root.TwitterFeed', TextField::create('TwitterAccessTokenSecret', 'Access Token Secret'));
$fields->addFieldToTab('Root.TwitterFeed', TextField::create('TwitterUsername', 'Twitter Username'));
$fields->addFieldToTab('Root.TwitterFeed', TextField::create('TwitterTweetCount', 'Tweet Count'));
}
function getLatestTweets() {
// Load tmhOAuth
require('libs/tmhOAuth.php');
require('libs/tmhUtilities.php');
$tmhOAuth = new tmhOAuth(array(
'consumer_key' => $this->owner->TwitterConsumerKey,
'consumer_secret' => $this->owner->TwitterConsumerSecret,
'user_token' => $this->owner->TwitterAccessToken,
'user_secret' => $this->owner->TwitterAccessTokenSecret,
'curl_ssl_verifypeer' => false
));
$code = $tmhOAuth->request('GET', $tmhOAuth->url('1.1/statuses/user_timeline'), array(
'screen_name' => $this->owner->TwitterUsername,
'count' => $this->owner->TwitterTweetCount
));
$response = $tmhOAuth->response['response'];
$tweets = json_decode($response, true);
if (!isset($tweets)) {
return false;
}
if($this->_errorCheck($tweets)){
return false;
}
$output = new ArrayList();
foreach ($tweets as &$tweet) {
$tweet['text'] = $this->tweetConvert(
isset($tweet['retweeted_status']) ? $tweet['retweeted_status']['text'] : $tweet['text']
);
$tweet['createdAgo'] = $this->relativeDate(strtotime($tweet['created_at']), false);
$output->push(new ArrayData($tweet));
}
return $output;
}
private function _errorCheck($tweets){
if(array_key_exists('errors', $tweets)){
$message = 'We have encountered '.count($tweets['errors']).' error(s): <br />';
foreach ($tweets['errors'] as $error) {
$message .= $error['message'].' Code:'.$error['code'].'<br />';
}
if(Director::isDev()){
throw new Exception($message, 1);
}
return true;
}
}
/**
* Function to convert links, mentions and hashtags: http://goo.gl/ciKGs
*/
function tweetConvert($tweet_string) {
$tweet_string = preg_replace("/((http(s?):\/\/)|(www\.))([\w\.]+)([a-zA-Z0-9?&%.;:\/=+_-]+)/i", "<a href='http$3://$4$5$6' target='_blank'>$2$4$5$6</a>", $tweet_string);
$tweet_string = preg_replace("/(?<=\A|[^A-Za-z0-9_])@([A-Za-z0-9_]+)(?=\Z|[^A-Za-z0-9_])/", "<a href='http://twitter.com/$1' target='_blank'>$0</a>", $tweet_string);
$tweet_string = preg_replace("/(?<=\A|[^A-Za-z0-9_])#([A-Za-z0-9_]+)(?=\Z|[^A-Za-z0-9_])/", "<a href='http://twitter.com/search?q=%23$1' target='_blank'>$0</a>", $tweet_string);
return $tweet_string;
}
function relativeDate($time, $AllValues = true) {
$oneDay = 86400;
$startOfYear = mktime(0, 0, 0, 0, 0);
$times = array (
24 * 60 * 60 => 'd',
60 * 60 => 'h',
60 => 'm',
1 => 's' );
// The elapsed amount of time in seconds
$elapsed = time() - floor($time);
if ($elapsed < 1) {
return '0s';
}
else if ($time < $startOfYear) {
return date("j M y", $time);
}
else if ($elapsed >= $oneDay) {
return date("j M", $time);
}
// Loop through all of the time "constants"
foreach ($times AS $seconds => $string) {
// Get the difference
$difference = floor($elapsed / $seconds);
// Is there an actual (positive) difference?
if ($difference >= 1) {
return $difference . $string;
}
}
}
public function TenMinuteCounter() {
// Returns a new number every ten minutes
return (int)(time() / 60 / 10);
}
}
我们将此扩展名添加到config.yml文件中。
配置文件
SiteConfig:
extensions:
- TwitterFeedSiteConfig
我在include文件夹中创建一个模板。然后,当我想在模板中使用它时,我打电话给<% include LatestTweets %>
。我还缓存了,LatestTweets
因为它调用了外部服务器,这在页面加载上造成了相当大的延迟。因此,我放入了一个10分钟的计数器来将这些推文缓存10分钟。
LatestTweets.ss
<% cached 'LatestTweets', $SiteConfig.TenMinuteCounter %>
<% if $SiteConfig.LatestTweets %>
<div class="latestTweets">
<% loop $SiteConfig.LatestTweets %>
<div class="tweet">
<p class="tweetText">$text</p>
<div class="tweetDate">
<a href="http://twitter.com/$user.screen_name/statuses/$id_str" title="View this tweet on Twitter" target="_blank" rel="nofollow">$createdAgo</a>
</div>
</div>
<% end_loop %>
</div>
<% end_if %>
<% end_cached %>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句