Twitter提要的PHP类-警告:中为foreach()提供的参数无效
我接管了一个网站,他们的推特订阅源有问题。我的PHP知识有限,无法解决这个问题 下面是他们提要的代码 我收到了多个警告 警告:为…中的foreach()提供的参数无效。。。。在线105等 出于隐私考虑,我已删除了作者和屏幕名称 有人能帮我或给我指出正确的方向吗 谢谢Twitter提要的PHP类-警告:中为foreach()提供的参数无效,php,twitter,Php,Twitter,我接管了一个网站,他们的推特订阅源有问题。我的PHP知识有限,无法解决这个问题 下面是他们提要的代码 我收到了多个警告 警告:为…中的foreach()提供的参数无效。。。。在线105等 出于隐私考虑,我已删除了作者和屏幕名称 有人能帮我或给我指出正确的方向吗 谢谢 <?php /** * feed.php * * A parsing and caching class for the Twitter Followers Feed * * @author ********* S
<?php
/**
* feed.php
*
* A parsing and caching class for the Twitter Followers Feed
*
* @author ********* September 2013
* @version 1.0
*
*/
class twitterFollowers
{
/**
* Array of Twitter data.
* @access private
* @var array
*/
private $data = array();
/**
* [$count description]
* @var integer
*/
private $count = 1;
/**
* [$user_data description]
* @var boolean
*/
private $user_data = true;
/**
* [$replies description]
* @var boolean
*/
private $replies = true;
/**
* [$screenName description]
* @var string
*/
private $screenName = '*********';
/**
* Default construct.
* Loads up data.
* @access public
* @return void
*/
public function __construct()
{
require_once('twitteroauth/twitteroauth.php');
require_once('config.php');
$this->loadData();
}
/**
* Fetches data either from cache if the cache file
* is less than a day old, otherwise the url
* is retrieved, parsed and cached
* @access private
* @return void
*/
private function loadData()
{
$data = array();
if ( !$data = get_transient('twitter') ) {
$connection = $this->getConnectionWithAccessToken(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
$tweets = $connection->get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=' . $this->screenName . '&count=' . $this->count . '&trim_user=0&exclude_replies=1');
$data = $tweets;
set_transient('twitter', $data, 3600);
}
$this->data = $data;
}
public 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;
}
/**
* Returns complete array of data.
* @access public
* @return array the data.
*/
public function getData() {
return $this->cleanData();
}
public function cleanData() {
$tweets = $this->data;
$data = array();
foreach ($tweets as $tweet) {
$tweetText = $tweet->text;
foreach($tweet->entities->user_mentions as $user_mention){
$tweetText = str_replace('@'.$user_mention->screen_name,'<a href="https://twitter.com/'.$user_mention->screen_name.'/" target="_blank"><span class="tweet-entity">@</span>'.$user_mention->screen_name.'</a>',$tweetText);
}
foreach($tweet->entities->hashtags as $hashtag){
$tweetText = str_replace('#'.$hashtag->text,'<a href="https://twitter.com/search/?q=%23'.$hashtag->text.'&src=hash" target="_blank"><span class="tweet-entity">#</span>'.$hashtag->text.'</a>',$tweetText);
}
foreach($tweet->entities->urls as $url){
$tweetText = str_replace($url->url,'<a href="'.$url->expanded_url.'" target="_blank">'.$url->display_url.'</a>',$tweetText);
}
if ($tweet->entities->media) {
foreach($tweet->entities->media as $media){
$tweetText = str_replace($media->url,'<a href="'.$media->expanded_url.'" target="_blank">'.$media->display_url.'</a>',$tweetText);
}
}
foreach($tweet->entities->symbols as $symbol){
$tweetText = str_replace('$'.$symbol->text,'<a href="https://twitter.com/search?q=%24'.$symbol->text.'" target="_blank"><span class="tweet-entity">$</span>'.$symbol->text.'</a>',$tweetText);
}
$tweetText = nl2br($tweetText);
$time = $this->get_timeago(strtotime($tweet->created_at));
$data[] = array(
'text' => $tweetText,
'time' => $time,
);
}
$data['user']['name'] = $tweets[0]->user->name;
$data['user']['screen_name'] = $tweets[0]->user->screen_name;
$data['user']['profile_img'] = $tweets[0]->user->profile_image_url;
return $data;
}
/**
* [get_timeago description]
* @param [type] $ptime [description]
* @return [type] [description]
*/
public function get_timeago( $ptime ) {
$etime = time() - $ptime;
if( $etime < 1 ) {
return 'less than 1 second ago';
}
$a = array( 12 * 30 * 24 * 60 * 60 => 'year',
30 * 24 * 60 * 60 => 'month',
24 * 60 * 60 => 'day',
60 * 60 => 'hour',
60 => 'minute',
1 => 'second'
);
foreach( $a as $secs => $str ) {
$d = $etime / $secs;
if( $d >= 1 ) {
$r = round( $d );
return $r . ' ' . $str . ( $r > 1 ? 's' : '' ) . ' ago';
}
}
}
}
$twitterFollowers = new twitterFollowers;
$twitter = $twitterFollowers->getData();
date_default_timezone_set('Europe/London'); ?>
在您的for之前进行以下检查
if (is_array($values) || is_object($values))
{
foreach ($tweets as $tweet)
{
// do stuff
}
}
这听起来不像是Twitter类中的错误。 听起来您只是没有检查返回的值是否有要循环的内容
if($tweets){ //..you need to add a check like this..
foreach($tweets as $tweet){
echo $tweet;
}
} else {
echo 'No tweets found...';
}
谢谢你们的建议。事实证明,这是一个关于过期Twitter代币的问题。