function twitter_standard_timeline($feed, $source) { $output = array(); if (!is_array($feed) && $source != 'thread') { return $output; } //32bit int / snowflake patch if (is_array($feed)) { foreach ($feed as $key => $status) { if ($status->id_str) { $feed[$key]->id = $status->id_str; } if ($status->in_reply_to_status_id_str) { $feed[$key]->in_reply_to_status_id = $status->in_reply_to_status_id_str; } if ($status->retweeted_status->id_str) { $feed[$key]->retweeted_status->id = $status->retweeted_status->id_str; } } } switch ($source) { case 'favourites': case 'friends': case 'replies': case 'retweets': case 'user': foreach ($feed as $status) { $new = $status; if ($new->retweeted_status) { $retweet = $new->retweeted_status; unset($new->retweeted_status); $retweet->retweeted_by = $new; $retweet->original_id = $new->id; $new = $retweet; } $new->from = $new->user; unset($new->user); $output[(string) $new->id] = $new; } return $output; case 'search': foreach ($feed as $status) { $output[(string) $status->id] = (object) array('id' => $status->id, 'text' => $status->text, 'source' => strpos($status->source, '<') !== false ? html_entity_decode($status->source) : $status->source, 'from' => (object) array('id' => $status->from_user_id, 'screen_name' => $status->from_user, 'profile_image_url' => $status->profile_image_url), 'to' => (object) array('id' => $status->to_user_id, 'screen_name' => $status->to_user), 'created_at' => $status->created_at, 'geo' => $status->geo); } return $output; case 'directs_sent': case 'directs_inbox': foreach ($feed as $status) { $new = $status; if ($source == 'directs_inbox') { $new->from = $new->sender; $new->to = $new->recipient; } else { $new->from = $new->recipient; $new->to = $new->sender; } unset($new->sender, $new->recipient); $new->is_direct = true; $output[] = $new; } return $output; case 'thread': // First pass: extract tweet info from the HTML $html_tweets = explode('</li>', $feed); foreach ($html_tweets as $tweet) { $id = preg_match_one('#msgtxt(\\d*)#', $tweet); if (!$id) { continue; } $output[$id] = (object) array('id' => $id, 'text' => strip_tags(preg_match_one('#</a>: (.*)</span>#', $tweet)), 'source' => preg_match_one('#>from (.*)</span>#', $tweet), 'from' => (object) array('id' => preg_match_one('#profile_images/(\\d*)#', $tweet), 'screen_name' => preg_match_one('#twitter.com/([^"]+)#', $tweet), 'profile_image_url' => preg_match_one('#src="([^"]*)"#', $tweet)), 'to' => (object) array('screen_name' => preg_match_one('#@([^<]+)#', $tweet)), 'created_at' => str_replace('about', '', preg_match_one('#info">\\s(.*)#', $tweet))); } // Second pass: OPTIONALLY attempt to reverse the order of tweets if (setting_fetch('reverse') == 'yes') { $first = false; foreach ($output as $id => $tweet) { $date_string = str_replace('later', '', $tweet->created_at); if ($first) { $attempt = strtotime("+{$date_string}"); if ($attempt == 0) { $attempt = time(); } $previous = $current = $attempt - time() + $previous; } else { $previous = $current = $first = strtotime($date_string); } $output[$id]->created_at = date('r', $current); } $output = array_reverse($output); } return $output; default: echo "<h1>{$source}</h1><pre>"; print_r($feed); die; } }
function twitter_standard_timeline($feed, $source) { $output = array(); if (!is_array($feed) && !is_array($feed->statuses) && $source != 'thread') { return $output; } if (is_array($feed)) { foreach ($feed as $key => $status) { if ($status->id_str) { $feed[$key]->id = $status->id_str; } if ($status->in_reply_to_status_id_str) { $feed[$key]->in_reply_to_status_id = $status->in_reply_to_status_id_str; } if ($status->retweeted_status->id_str) { $feed[$key]->retweeted_status->id = $status->retweeted_status->id_str; } } } switch ($source) { case 'search': $feed = $feed->statuses; case 'status': case 'favourites': case 'friends': case 'replies': case 'user': foreach ($feed as $status) { $new = $status; if ($new->retweeted_status) { $retweet = $new->retweeted_status; unset($new->retweeted_status); $retweet->retweeted_by = $new; $retweet->original_id = $new->id_str; $new = $retweet; } $new->from = $new->user; unset($new->user); $output[(string) $new->id_str] = $new; } return $output; case 'directs_sent': case 'directs_inbox': foreach ($feed as $status) { $new = $status; if ($source == 'directs_inbox') { $new->from = $new->sender; $new->to = $new->recipient; } else { $new->from = $new->recipient; $new->to = $new->sender; } unset($new->sender, $new->recipient); $new->is_direct = true; $output[] = $new; } return $output; case 'thread': $html_tweets = explode('</li>', $feed); foreach ($html_tweets as $tweet) { $id = preg_match_one('#msgtxt(\\d*)#', $tweet); if (!$id) { continue; } $output[$id] = (object) array('id' => $id, 'text' => strip_tags(preg_match_one('#</a>: (.*)</span>#', $tweet)), 'source' => preg_match_one('#>from (.*)</span>#', $tweet), 'from' => (object) array('id' => preg_match_one('#profile_images/(\\d*)#', $tweet), 'screen_name' => preg_match_one('#twitter.com/([^"]+)#', $tweet), 'profile_image_url' => preg_match_one('#src="([^"]*)"#', $tweet)), 'to' => (object) array('screen_name' => preg_match_one('#@([^<]+)#', $tweet)), 'created_at' => str_replace('about', '', preg_match_one('#info">\\s(.*)#', $tweet))); } return $output; default: echo "<h1>{$source}</h1><pre>"; print_r($feed); die; } }