【问题标题】:Check if twitter username exists检查推特用户名是否存在
【发布时间】:2011-02-20 04:12:27
【问题描述】:

有没有办法检查 Twitter 用户名是否存在? 没有通过 OAuth 或 twitter 基本身份验证进行身份验证?

【问题讨论】:

  • 如果您想成为您显然依赖于您的服务的远程网站的好公民,您很可能希望使用已发布的 API 和 OAuth 来做到这一点。有了它们,用户查找非常容易:apiwiki.twitter.com/Twitter-REST-API-Method:-users-lookup 实现 OAuth 也很容易,因为现有的库可以简化流程 apiwiki.justin.tv/mediawiki/index.php/OAuth_Ruby_Tutorial -- 我们在您的应用程序中讨论了五行额外的代码。 -- 如果您在 API 之外自动执行此操作,您可能会受到 Twitter 限制/阻止的速率。
  • 你应该重新选择选择的答案。

标签: authentication twitter oauth exists


【解决方案1】:

更新

Twitter REST API v1 不再有效。

所以使用 https://api.twitter.com/1.1/users/show.json?screen_name=username


您也可以使用带有用户名的 API:

http://api.twitter.com/1/users/show.xml?screen_name=tarnfeld

会给你:

<?xml version="1.0" encoding="UTF-8"?>
<user>
  ...................
  <screen_name>tarnfeld</screen_name>
  <location>Portsmouth, UK</location>
  .................
  </status>
</user>

如果不存在:

<?xml version="1.0" encoding="UTF-8"?>
<hash>
  <request>/1/users/show.xml?screen_name=tarnfeldezf</request>
  <error>Not found</error>
</hash>

【讨论】:

【解决方案2】:

2021 年更新:此 API 不可用。

目前,您最好使用注册表单用来实时检查用户名可用性的 API。请求的格式为:

https://twitter.com/users/username_available?username=whatever

如果用户名可以注册,则给你一个带有valid 键的 JSON 响应,给你一个 true:

{"valid":false,"reason":"taken","msg":"Username has already been taken","desc":"That username has been taken. Please choose another."}
{"valid":true,"reason":"available","msg":"Available!","desc":"Available!"}
{"valid":false,"reason":"is_banned_word","msg":"Username is unavailable","desc":"The username \"root\" is unavailable. Sorry!"}

这比检查 404 响应更好的原因是,有时会保留字词(如上面的“root”),或者实际使用了用户名,但由于某种原因,该帐户已从 Twitter 前端消失。

【讨论】:

  • 此解决方案的唯一问题是您尝试调用的端点未记录且不受支持,您的应用将面临被阻止的危险。
  • 截至 2021 年,/users/username_available 端点不再可用
【解决方案3】:

更新:此 API 自 2012 年起不可用。

根据 api 文档,您可以将电子邮件地址传递给用户/ show 方法,我会假设如果用户不存在,你会回来 404,它应该允许您确定用户是否 存在。

例如:http://twitter.com/users/show.xml?email=t...@example.com

如果不存在则结果:

<?xml version="1.0" encoding="UTF-8"?> 
<hash> 
  <request>/users/show.xml?email=tur...@example.com</request> 
  <error>Not found</error> 
</hash

【讨论】:

  • 问题是我没有他们的电子邮件地址。
  • Twitter API 不再支持通过电子邮件地址查找。
【解决方案4】:

要实现您要查找的内容,您可以使用 shadowban.eu 等第三方服务,它们提供的 API 端点将以 JSON 格式返回有关 twitter 用户的信息:

APIhttps://shadowban.eu/.api/USERNAME_HERE

回应
轮廓 保护假 存在真实 屏幕名称“cbbbc” has_tweets 真 敏感
可能敏感 1 数 68 可能敏感的可编辑 28 测试

禁止虚假 预输入真 搜索“1411036459847593990” 更多回复
禁止真 in_reply_to "1391745382447730688" 阶段1 推特“1391769295848419329” 时间戳1625596207.462817

【讨论】:

    【解决方案5】:

    你可以试试:

    <?php
    $user = "toneid";
    $contents = @file_get_contents('http://www.twitter.com/'.$user);
    if (!$contents) {
        // Report error
        echo "Not a valid user";
        } else {
        // If is a valid url
        echo "OK!";
    } 
    ?>
    

    【讨论】:

      【解决方案6】:

      由于 API v1 不再可用,这是另一种检查 Twitter 帐户是否存在的方法。非现有帐户的页眉包含 404(未找到页面)。

      function twitterAccountExists($username){
          $headers = get_headers("https://twitter.com/".$username);
          if(strpos($headers[0], '404') !== false ) {
              return false;
          } else {
              return true;
          }
      }
      

      【讨论】:

      • 它不会告诉你用户名是否真的可用。暂停和删除的页面返回 404 状态码
      【解决方案7】:

      这对我有用,接近 sferik 发布的内容。

      def twitter_user_exists?(user)
         Twitter.user(user)
         true
      rescue Twitter::Error::NotFound
         false
      end
      

      【讨论】:

        【解决方案8】:

        使用 Ruby,您可以安装 twitter gem,然后定义以下方法:

        require 'twitter'
        
        def user_exists?(user)
          Twitter.user(user)
          true
        rescue Twitter::NotFound
          false
        end
        

        然后,只需将 Twitter 用户名或 ID 传递给您的方法,如下所示:

        user_exists?("sferik") #=> true
        user_exists?(7505382) #=> true
        

        【讨论】:

          【解决方案9】:

          这是它在 PHP 上的工作原理:

          $user_infos = 'http://api.twitter.com/1/users/show.xml?screen_name='.$username;
          
          if (!@fopen($user_infos, 'r'))
          {
          return false;
          }
          return true;
          

          【讨论】:

            【解决方案10】:

            您可以尝试抓取http://twitter.com/username 页面并阅读响应,看看您是否收到“抱歉,该页面不存在!”页面。

            编辑:

            正如@Pablo Fernandez 在评论中提到的那样,检查响应标头会更好(更快、更可靠),如果用户不存在,它将是“404 not-found”。

            【讨论】:

            • 我曾经与某人进行了一次有趣的在线讨论,他抱怨 Twitter 或类似的服务会告诉您输入的用户名或密码中的哪个错误,他认为这是糟糕的安全设计.这正是我所说的。
            • @Pascal Cuoq:我认为 Twitter 让你看到其他人发布的内容而不强迫你自己注册是一件更积极的事情。
            • @Bill 而不是检查“对不起,该页面不存在”我会检查 http 响应代码,在这种情况下是 404 not-found
            • @Pablo:那肯定会更可靠。我没有费心去检查,也没有意识到这是一个自定义的 404 页面。
            • 刚刚检查了这个(2020 年 4 月),即使用户不存在,Twitter 也会返回 200 OK。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-29
            • 1970-01-01
            相关资源
            最近更新 更多