【问题标题】:Twitter API: Url search for UsernameTwitter API:用户名的 URL 搜索
【发布时间】:2013-05-23 23:35:26
【问题描述】:

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

美好的一天!

【问题讨论】:

    标签: twitter-bootstrap twitter twitter-oauth


    【解决方案1】:

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

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

    I wrote a post here 用漂亮的图片为需要的人解释了使用 PHP 调用其 1.1 版 api 所需的确切步骤。

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

    1. 在 twitter 开发网站上设置应用程序。这很简单,因此您和 twitter 之间都有一组键(总共有四个键,我的帖子对此进行了解释)。
    2. 包括 PHP 脚本,一切都在我的帖子和 github 上。
    3. 从那时起,您只需将变量用户名传递给 PHP,并使用该变量通过 v1.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() 结果并寻找如何确定用户是否存在。显然它不会包含实际用户,它可能包含falsenull

    由于我不知道,假设$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,我找到了问题!到了我的尽头。你的整篇文章为我节省了很多时间。不幸的是,没有足够的积分来投票。虽然收到了支票! :) 周末愉快!
    【解决方案2】:

    这是我的代码,用于检查用户是否存在,基于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
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多