保存推文而不是回显/列出项目

时间:2013-02-11 14:44:13

标签: php database twitter echo

我使用开源twitter.class.php在Twitter上查询/搜索特定术语。

我不想回应一切。我想将输出保存到数据库。

如何替换echo并将每条记录保存到数据库?

我不知道如何打破getTweets($ termt,100);

100让它一次得到100条推文。

require('twitter.class.php');
$twitter = new twitter_class();
echo $twitter->getTweets($termt, 100);

注意:我不知道如何使用数组。请帮帮我。

谢谢。

这是我的Twitter.class.php

function twitter_class()
{
    $this->realNamePattern = '/\((.*?)\)/';
    $this->searchURL = 'http://search.twitter.com/search.atom?rpp=500&lang=en&q=';

    $this->intervalNames   = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year');
    $this->intervalSeconds = array( 1,        60,       3600,   86400, 604800, 2630880, 31570560);

    $this->badWords = array('somebadword', 'anotherbadword');
}

function getTweets($q, $limit=500)
{
    $output = '';

    // get the seach result
    $ch= curl_init($this->searchURL . urlencode($q));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    $response = curl_exec($ch);

    if ($response !== FALSE)
    {
        $xml = simplexml_load_string($response);

        $output = '';
        $tweets = 0;

        for($i=0; $i<count($xml->entry); $i++)
        {
            $crtEntry = $xml->entry[$i];
            $account  = $crtEntry->author->uri;
            $image    = $crtEntry->link[1]->attributes()->href;
            $tweet    = $crtEntry->content;

            // skip tweets containing banned words
            $foundBadWord = false;
            foreach ($this->badWords as $badWord)
            {
                if(stristr($tweet, $badWord) !== FALSE)
                {
                    $foundBadWord = true;
                    break;
                }
            }

            $tweet = str_replace('<a href=', '<a target="_blank" href=', $tweet);

            // skip this tweet containing a banned word
            if ($foundBadWord)
                continue;

            // don't process any more tweets if at the limit
            if ($tweets==$limit)
                break;
            $tweets++;

            // name is in this format "acountname (Real Name)"
            preg_match($this->realNamePattern, $crtEntry->author->name, $matches);
            $name = $matches[1];

            // get the time passed between now and the time of tweet, don't allow for negative
            // (future) values that may have occured if server time is wrong
            $time = 'just now';
            $secondsPassed = time() - strtotime($crtEntry->published);

            if ($secondsPassed>0)
            {
                // see what interval are we in
                for($j = count($this->intervalSeconds)-1; ($j >= 0); $j--)
                {
                    $crtIntervalName = $this->intervalNames[$j];
                    $crtInterval = $this->intervalSeconds[$j];

                    if ($secondsPassed >= $crtInterval)
                    {
                        $value = floor($secondsPassed / $crtInterval);
                        if ($value > 1)
                            $crtIntervalName .= 's';

                        $time = $value . ' ' . $crtIntervalName . ' ago';

                        break;
                    }
                }
            }

            $output .= '
            <div class="tweet">
                <div class="avatar">
                    <a href="' . $account . '" target="_blank"><img src="' . $image .'"></a>
                </div>
                <div class="message">
                    <span class="author"><a href="' . $account . '"  target="_blank">' . $name . '</a></span>: ' . 
                    $tweet . 
                    '<span class="time"> - ' . $time . '</span>
                </div>
            </div>';
        }
    }
    else
        $output = '<div class="tweet"><span class="error">' . curl_error($ch) . '</span></div>';

    curl_close($ch);
    return $output;
}

}

1 个答案:

答案 0 :(得分:0)

你需要解析该函数​​的输出,使用循环和DOM库,更具体地说是推文本身,它嵌套在几个div / spans中。

然后,您可以为循环的每次迭代执行INSERT INTO语句。