PHP封装Twitter访问类实例
本文分享一个PHP实现的Twitter访问类代码,通过curl获取数据并以XML格式返回,展示了一种基础的API交互方式。
目标与准备条件
在早期的Twitter开发中,开发者通常直接使用XML API来获取用户的推文列表。本文将提供一个完整的PHP类实现,该类负责:
- 使用 cURL 发起 HTTP 请求获取 Twitter 的用户时间线(User Timeline)。
- 将原始的 XML 响应解析为对象。
- 对推文内容中的 URL、用户名(@)和话题标签(#)进行正则替换,生成可点击的 HTML 链接。
环境要求包括支持 cURL 扩展的 PHP 运行环境以及能够访问公网以连接 Twitter 服务器。
核心操作顺序
第1步:初始化HTTP请求
类的核心功能 api_call 使用标准的 PHP cURL 函数库来构建请求:
- 通过
curl_init()初始化会话。 - 设置请求的目标 URL 为用户时间线的 XML 端点。
- 配置
CURLOPT_RETURNTRANSFER确保获取响应文本而非直接输出。 - 设置合理的超时时间以防请求挂起。
- 执行请求后,检查 HTTP 状态码是否为
200。
第2步:数据解析与格式化
如果获取成功,代码利用 SimpleXMLElement 将 XML 字符串转换为易于遍历的对象结构。随后,主方法 get_tweets 遍历这些状态节点:
- 过滤回复:代码中包含逻辑用于根据特定规则筛选非回复状态的推文。
- 内容处理:调用内部方法
process_links对文本进行预处理。 - 正则高亮:通过
preg_replace匹配三种模式:- URL:自动包裹
<a>标签。 - @提及:重定向到对应的 Twitter 个人主页。
- #话题:重定向到 hashtag 搜索页面。
- URL:自动包裹
第3步:HTML结构组装
最终结果被包装在特定的 div 结构中:
<div id="tweets"> 作为容器,每个推文包含主体内容和带有时间戳的详情部分。这使得前端可以直接嵌入生成的 HTML。
class Twitter {
/**
* Method to make twitter api call for the users timeline in XML
*
* @access private
* @param $twitter_id, $num_of_tweets
* @return $xml
*/
private function api_call($twitter_id, $num_of_tweets) {
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/$twitter_id.xml?count=$num_of_tweets");
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($c, CURLOPT_TIMEOUT, 5);
$response = curl_exec($c);
$response_info = curl_getinfo($c);
curl_close($c);
if (intval($response_info['http_code']) == 200) {
$xml = new SimpleXMLElement($response);
return $xml;
} else {
return false;
}
}
/**
* Method to add hyperlink html tags to any urls, twitter ids or hashtags in tweet
*
* @access private
* @param $text
* @return $text
*/
private function process_links($text) {
$text = utf8_decode($text);
$text = preg_replace('@(https?://([-\w.]+)+(d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '$1', $text);
$text = preg_replace("#(^|[\\n ])@([^ \\"\\t\\n\\r<]*)#ise", "'\\1@\\2'", $text);
$text = preg_replace("#(^|[\\n \\])#([^ \\"\\t\\n\\r<]*)#ise", "'\\1#\\2'", $text);
return $text;
}
/**
* Main method to retrieve the tweets and return html for display
*
* @access public
* @param $twitter_id, $num_of_tweets, $timezone
* @return $result
*/
public function get_tweets($twitter_id, $num_of_tweets = 3, $timezone = "America/Denver") {
$include_replies = false;
date_default_timezone_set($timezone);
// the html markup
$cont_o = "<div id=\"tweets\">\n";
$tweet_o = "<div class=\"status\">\n";
$tweet_c = "</div>\n\n";
$detail_o = "<div class=\"details\">\n";
$detail_c = "</div>\n\n";
$cont_c = "</div>\n";
if ($twitter_xml = $this->api_call($twitter_id, $num_of_tweets)) {
$result = $cont_o;
foreach ($twitter_xml->status as $key => $status) {
if ($include_replies == true | substr_count($status->text, "@") == 0 | strpos($status->text, "@") != 0) {
$tweet = $this->process_links($status->text);
$result .= $tweet_o . $tweet . $tweet_c . $detail_o . date('D jS M y H:i', strtotime($status->created_at)) . $detail_c;
}
}
$result .= $cont_c;
} else {
$result .= $cont_o . $tweet_o . "Twitter seems to be unavailable at the moment." . $tweet_c . $cont_c;
}
return $result;
}
}
完成判断
调用 $twitter => get_tweets('username') 后,应得到一个包含格式化后的 HTML 字符串。如果在页面上渲染该字符串能正常显示带超链接的文字和时间信息,即表示调用成功。
排错指引
如果遇到 Twitter seems to be unavailable... 提示,请检查:
1. 网络连接是否正常。
2. 目标 Twitter ID 是否正确。
3. cURL 扩展是否已被正确加载。
以上就是PHP封装的Twitter访问类实例的详细内容,更多关于PHP调用Twitter的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













