[英]Using PHP and the new Twitter API
由于新的Twitter API,我使用PHP在我的网页上使用PHP显示1条最新推文。
目前我已经让它工作,所以推文只是作为一个简单的文本字符串输出。 我的问题是如何控制输出的HTML? 如果在推文中声明了主题标签或网址,我希望能够将链接显示为链接。 我该怎么做呢?
到目前为止,这是我的代码,在我的页面中输出字符串作为推文:
function get_tweet() {
require 'tmhOAuth.php';
require 'tmhUtilities.php';
$tmhOAuth = new tmhOAuth(array(
'consumer_key' => 'secret',
'consumer_secret' => 'secret',
'user_token' => 'secret',
'user_secret' => 'secret',
'curl_ssl_verifypeer' => false
));
$code = $tmhOAuth->request('GET', $tmhOAuth->url('1.1/statuses/user_timeline'), array(
'screen_name' => 'evanrichards',
'count' => '1'));
$response = $tmhOAuth->response['response'];
$tweets = json_decode($response, true);
echo($tweets[0]['text']);
}
下面是一些用php替换链接,hashtags和attags的示例代码
$tweet = "@george check out http://www.google.co.uk #google";
//Convert urls to <a> links
$tweet = preg_replace("/([\w]+\:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/", "<a target=\"_blank\" href=\"$1\">$1</a>", $tweet);
//Convert hashtags to twitter searches in <a> links
$tweet = preg_replace("/#([A-Za-z0-9\/\.]*)/", "<a target=\"_new\" href=\"http://twitter.com/search?q=$1\">#$1</a>", $tweet);
//Convert attags to twitter profiles in <a> links
$tweet = preg_replace("/@([A-Za-z0-9\/\.]*)/", "<a href=\"http://www.twitter.com/$1\">@$1</a>", $tweet);
echo $tweet;
这给出了输出
<a href="http://www.twitter.com/george">@george</a> check out <a target="_blank" href="http://www.google.co.uk">http://www.google.co.uk</a> <a target="_new" href="http://twitter.com/search?q=google">#google</a>
所以你可以改变你的代码
function get_tweet() {
require 'tmhOAuth.php';
require 'tmhUtilities.php';
$tmhOAuth = new tmhOAuth(array(
'consumer_key' => 'secret',
'consumer_secret' => 'secret',
'user_token' => 'secret',
'user_secret' => 'secret',
'curl_ssl_verifypeer' => false
));
$code = $tmhOAuth->request('GET', $tmhOAuth->url('1.1/statuses/user_timeline'), array(
'screen_name' => 'evanrichards',
'count' => '1'));
$response = $tmhOAuth->response['response'];
$tweets = json_decode($response, true);
$tweet = $tweets[0]['text'];
$tweet = preg_replace("/([\w]+\:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/", "<a target=\"_blank\" href=\"$1\">$1</a>", $tweet);
$tweet = preg_replace("/#([A-Za-z0-9\/\.]*)/", "<a target=\"_new\" href=\"http://twitter.com/search?q=$1\">#$1</a>", $tweet);
$tweet = preg_replace("/@([A-Za-z0-9\/\.]*)/", "<a href=\"http://www.twitter.com/$1\">@$1</a>", $tweet);
echo($tweet);
}
我确信正则表达式可以改进。
或者甚至更好,然后你可以把它分成它自己的功能。
function linkify_tweet($tweet) {
$tweet = preg_replace("/([\w]+\:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/", "<a target=\"_blank\" href=\"$1\">$1</a>", $tweet);
$tweet = preg_replace("/#([A-Za-z0-9\/\.]*)/", "<a target=\"_new\" href=\"http://twitter.com/search?q=$1\">#$1</a>", $tweet);
$tweet = preg_replace("/@([A-Za-z0-9\/\.]*)/", "<a href=\"http://www.twitter.com/$1\">@$1</a>", $tweet);
return $tweet;
}
function get_tweet() {
require 'tmhOAuth.php';
require 'tmhUtilities.php';
$tmhOAuth = new tmhOAuth(array(
'consumer_key' => 'secret',
'consumer_secret' => 'secret',
'user_token' => 'secret',
'user_secret' => 'secret',
'curl_ssl_verifypeer' => false
));
$code = $tmhOAuth->request('GET', $tmhOAuth->url('1.1/statuses/user_timeline'), array(
'screen_name' => 'evanrichards',
'count' => '1'));
$response = $tmhOAuth->response['response'];
$tweets = json_decode($response, true);
echo(linkify_tweet($tweets[0]['text']));
}
在大多数情况下,简单的正则表达式都适用。 但Twitter实体为您解决了解析问题,并为您提供有关链接,用户名等的更多信息。
请参阅此处的完整文档: https : //dev.twitter.com/overview/api/entities-in-twitter-objects
要格式化文本,请获取需要进行的所有替换的列表,然后按相反的顺序执行替换(因此在文本展开后,偏移保持正确)。
<?php
function twitter_format($tweet) {
$text = $tweet['text'];
$entities = isset($tweet['entities']) ? $tweet['entities'] : array();
$replacements = array();
if (isset($entities['hashtags'])) {
foreach ($entities['hashtags'] as $hashtag) {
list ($start, $end) = $hashtag['indices'];
$replacements[$start] = array($start, $end,
"<a href=\"https://twitter.com/search?q={$hashtag['text']}\">#{$hashtag['text']}</a>");
}
}
if (isset($entities['urls'])) {
foreach ($entities['urls'] as $url) {
list ($start, $end) = $url['indices'];
// you can also use $url['expanded_url'] in place of $url['url']
$replacements[$start] = array($start, $end,
"<a href=\"{$url['url']}\">{$url['display_url']}</a>");
}
}
if (isset($entities['user_mentions'])) {
foreach ($entities['user_mentions'] as $mention) {
list ($start, $end) = $mention['indices'];
$replacements[$start] = array($start, $end,
"<a href=\"https://twitter.com/{$mention['screen_name']}\">@{$mention['screen_name']}</a>");
}
}
if (isset($entities['media'])) {
foreach ($entities['media'] as $media) {
list ($start, $end) = $media['indices'];
$replacements[$start] = array($start, $end,
"<a href=\"{$media['url']}\">{$media['display_url']}</a>");
}
}
// sort in reverse order by start location
krsort($replacements);
foreach ($replacements as $replace_data) {
list ($start, $end, $replace_text) = $replace_data;
$text = mb_substr($text, 0, $start, 'UTF-8').$replace_text.mb_substr($text, $end, NULL, 'UTF-8');
}
return "<p>$text</p>";
}
echo twitter_format($tweets[0]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.