【发布时间】:2013-05-23 23:35:26
【问题描述】:
我有一个网站列表,我想查看他们是否有 Twitter 帐户。我很好奇 API 中是否有用户名的 url 搜索,或者类似的东西。我一直在阅读和环顾四周;但是,我做得不够。当我可以运行一个函数来为我完成这项工作时,我不想手动执行此操作。非常感谢您对此主题的一些反馈。
美好的一天!
【问题讨论】:
标签: twitter-bootstrap twitter twitter-oauth
我有一个网站列表,我想查看他们是否有 Twitter 帐户。我很好奇 API 中是否有用户名的 url 搜索,或者类似的东西。我一直在阅读和环顾四周;但是,我做得不够。当我可以运行一个函数来为我完成这项工作时,我不想手动执行此操作。非常感谢您对此主题的一些反馈。
美好的一天!
【问题讨论】:
标签: twitter-bootstrap twitter twitter-oauth
正如上面评论中所解释的,twitter API 的第 1 版已被弃用,很快将被完全删除。这意味着简单的请求在被删除后将不再起作用,这很快就会实现!
基本上,从那时起,为了从 twitter 获取任何类型的数据,您需要使用他们的版本 1.1 api 发出经过身份验证的请求。
I wrote a post here 用漂亮的图片为需要的人解释了使用 PHP 调用其 1.1 版 api 所需的确切步骤。
在您仔细阅读上述帖子之后,这就是您想要做的事情。
我假设你会一点 PHP。这就是您如何使用twitter v1.1 api 来检查用户名是否存在。
Take a look at the docs 用于获取用户的时间线。文档声明您可以使用 screen_name 参数。您也知道它需要 GET 请求。
有了以上信息和我的班级,你可以很容易地为用户执行请求。
require_once "TwitterAPIExchange.php";
// As my post explains, these are the keys you get from the twitter dev site
$settings = array(
'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN",
'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET",
'consumer_key' => "YOUR_CONSUMER_KEY",
'consumer_secret' => "YOUR_CONSUMER_SECRET"
);
// This is the username you want to check. You can get it however you want. Just place it into this $username variable.
$username = 'USERNAMEHERE';
$url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
$requestMethod = 'GET';
$getfield = '?screen_name='.$username;
$twitter = new TwitterAPIExchange($settings);
$result = $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
好的,结果现在存储在$result 变量中。你可以在这里做你想做的事。您想检查用户是否存在,所以var_dump() 结果并寻找如何确定用户是否存在。显然它不会包含实际用户,它可能包含false 或null。
由于我不知道,假设$result->user 等于false。您只需这样做:
if (!$result->user)
{
echo "The user doesn't exist!";
}
else
{
echo "The user exists!";
}
...或者,简写风格(我喜欢在我的帖子中添加这样的小东西)
echo (!$result->user) ? "Doesn't exist! :(" : "Exists!";
做一点研究,使用:
【讨论】:
这是我的代码,用于检查用户是否存在,基于Jimbo 非常有用的 PHP 类,如上所述。
首先,使用 json_decode 将$result 转换为 PHP 数组。确保将第二个参数设置为 true,这样您就不会在结果数组中获得 Objects:
$result = json_decode($result, true);
现在您必须检查 screen_name 数组键是否存在,但 array_key_exists 不会递归地查看多维数组。所以你需要一个新的函数here:
function array_key_exists_r($needle, $haystack) {
$result = array_key_exists($needle, $haystack);
if ($result) return $result;
foreach ($haystack as $v) {
if (is_array($v)) {
$result = array_key_exists_r($needle, $v);
}
if ($result) return $result;
}
return $result;
}
下面是使这一切正常工作的最后一段代码。注意我在$result 数组中指向的位置。我基本上是在查看发布第一条推文的用户的 screen_name,因为 Twitter API 返回 $username 中指定的用户时间线。
$result = json_decode($result, true);
if ( array_key_exists_r('screen_name', $result ) ) {
if ( $result[0]['user']['screen_name'] == $username ) {
// The username exists
}
} else {
// The username doesn't exist
}
我不确定是否有更好的方法来检查用户名是否存在。也许只是使用检查错误代码来代替?
【讨论】: