如何以正确的方式编写以下代码以打印返回值

阿比舍克·辛格(Abhishek Singh)
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 %>`

任何人都可以帮助我破解此代码。接受任何帮助。

3dgoo

一种方法是创建一个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要做到这一点,我延长SiteConfigTwitterFeedSiteConfig 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章