Проверьте, существует ли имя пользователя Twitter - PullRequest
14 голосов
/ 16 мая 2010

Есть ли способ проверить, существует ли имя пользователя в твиттере? Не проходя аутентификацию с помощью OAuth или простой аутентификации в твиттере?

Ответы [ 9 ]

24 голосов
/ 12 июня 2014

На данный момент вам лучше использовать API, который форма регистрации использует для проверки доступности имени пользователя в режиме реального времени. Запросы имеют формат:

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

И даст вам ответ JSON с ключом valid, который даст вам истину, если имя пользователя будет зарегистрировано:

{"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.

6 голосов
/ 17 мая 2010

Вы также можете использовать 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>
4 голосов
/ 21 октября 2014

Поскольку 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;
    }
}
3 голосов
/ 15 августа 2010

Вот как это работает на PHP:

$user_infos = 'http://api.twitter.com/1/users/show.xml?screen_name='.$username;

if (!@fopen($user_infos, 'r'))
{
return false;
}
return true;
2 голосов
/ 17 августа 2012

Это сработало для меня, близко к тому, что опубликовал sferik.

def twitter_user_exists?(user)
   Twitter.user(user)
   true
rescue Twitter::Error::NotFound
   false
end
2 голосов
/ 17 мая 2010

Вы можете попробовать захватить страницу http://twitter.com/username и прочитать ответ, чтобы увидеть, получаете ли вы "Извините, эта страница не существует!" стр.

Edit:

Как упоминал @Pablo Fernandez в комментарии, будет лучше (быстрее, надежнее) проверить заголовок ответа, который будет "404 not-found", если пользователь не существует.

1 голос
/ 25 мая 2011

Используя Ruby, вы можете установить гем twitter, а затем определить следующий метод:

require 'twitter'

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

Затем просто введите имя пользователя или идентификатор Twitter в ваш метод, например так:

user_exists?("sferik") #=> true
user_exists?(7505382) #=> true
1 голос
/ 17 мая 2010

Согласно api docs вы можете передать адрес электронной почты пользователю / show method, я бы предположил, что если бы пользователь не существовал, вы бы вернулись 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
0 голосов
/ 16 ноября 2015

Вы можете попробовать:

<?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!";
} 
?>
...