0

我有一个网站列表,我想查看他们是否有 Twitter 帐户。我很好奇 API 中是否有用户名的 url 搜索,或者类似的东西。我一直在阅读和环顾四周;但是,我做得不够。当我可以运行一个函数来为我完成这项工作时,我不想手动执行此操作。非常感谢有关此主题的一些反馈。

再会!

4

2 回答 2

5

正如上面评论中所解释的,twitter API 的第 1 版已被弃用,很快将被完全删除。这意味着简单的请求一旦被删除就不再起作用,这很快就会实现!

基本上,从那时起,为了从 twitter 获取任何类型的数据,您需要使用他们的1.1版api发出经过身份验证的请求。

我在这里写了一篇文章,用漂亮的图片为需要它们的人解释了使用 PHP 调用其 1.1 版 api 所需的确切步骤。

在您彻底阅读上述帖子之后,这就是您想要做的事情。

  1. 在 twitter 开发网站上设置应用程序。这很简单,因此您和 twitter 之间都有一组键(总共有四个键,我的帖子对此进行了解释)。
  2. 包括 PHP 脚本,一切都在我的帖子和 github 上。
  3. 从那时起,您只需将变量 username 传递给 PHP,并使用该变量通过 v1.1 api 检查它们是否存在。

我假设你知道一点 PHP。这就是您使用twitter v1.1 api检查用户名是否存在的方式。

查看文档以获取用户的时间线。文档声明您可以使用 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()结果并寻找如何确定用户是否存在。显然它不会包含实际用户,它可能包含falseor 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!";

做一点研究,使用:

于 2013-05-25T12:44:22.507 回答
0

这是我的代码,用于检查用户是否存在,基于Jimbo非常有用的 PHP 类,如上所述。

首先,使用 json_decode 转换$result成 PHP 数组。确保将第二个参数设置为,true这样您就不会在结果数组中获得 Objects:

$result = json_decode($result, true);

现在您必须检查screen_name数组键是否存在,但 array_key_exists 不会递归地查看多维数组。因此,您需要一个新功能,如下所示

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
}

我不确定是否有更好的方法来检查用户名是否存在。也许只是使用检查错误代码来代替?

于 2013-12-17T09:29:04.507 回答