Доступ к URL-адресам профиля Facebook

#python #facebook

#python #Facebook

Вопрос:

Цель здесь, учитывая URL-адрес профиля facebook пользователя, получить доступ и открыть страницу профиля. Немного простого кода на python:

 from urllib2 import urlopen
url = "http://www.facebook.com/username"
page = urlopen(url)
  

Проблема в том, что для некоторого «имени пользователя» это вызывает ОШИБКУ HTTP 404. Я заметил, что эта ошибка возникает только тогда, когда путь включает имя, а не формат «profile.php?id= XXX».

Обратите внимание, что здесь у нас есть только URL, а не идентификатор пользователя.

ОБНОВЛЕНИЕ: Оказалось, что это произошло также для некоторых «profile.php?id= XXX» и других форматов имени пользователя.

Ответ №1:

Это функция Facebook для обеспечения конфиденциальности. Пользователи имеют возможность скрывать страницу своего профиля, чтобы их страницу могли просматривать только зарегистрированные пользователи. Доступ к странице с помощью /profile.php?id=XXX или с /username не имеет значения. Вы должны войти в систему, чтобы просмотреть HTML-страницу.

В вашем контексте вам пришлось бы сначала войти в действительную учетную запись Facebook, прежде чем запрашивать страницу, и вы больше не должны получать 404-е номера.

Один из способов проверить это — использовать graph API, graph.facebook.com/USERNAME вернет link свойство в результирующем JSON, если у них есть общедоступная страница, и оно будет опущено на частных страницах.

Ответ №2:

Не каждая учетная запись Facebook доступна в ПЕРВУЮ очередь.ПОСЛЕДНЕЕ, поэтому вы не сможете надежно это сделать.

В настоящее время нет гарантии, что учетная запись доступна с именем vanity.

Комментарии:

1. Да, но я говорю об URL-адресе, который я уже могу открыть в браузере. Проблема в том, что я не могу получить к нему доступ с помощью кода.

2. Это довольно странно: возможно, вам нужно поиграть со строкой User-Agent, которую вы отправляете. Я раньше не видел, чтобы это было проблемой, но если это работает в браузере, единственное, о чем я могу думать, это какая-то форма прослушивания пользовательского агента с их стороны, чтобы попытаться предотвратить успех более тупых скребков экрана. Работает ли это для КАКИХ FIRST.LAST -либо страниц?

3. Если у вас есть терминал, что wget -S -O - {url} выводится на печать для одного из тех, которые работают, и для одного из тех, которые не работают?

4. Очень странно: не уверен, что вам сказать. Возможно, это просто системная ошибка Facebook. Я заметил, что у меня иногда возникают запросы API с таймаутом, и когда я обновляю страницу, они внезапно срабатывают. Происходят ли сбои, по крайней мере, постоянно (поэтому страница, которая не работает, НИКОГДА НЕ работает, а страница, которая работает, ВСЕГДА работает)?

5. До сих пор это кажется согласованным. Даже для «profile.php?id=XXX» он имеет разный ответ для разных идентификаторов. Для некоторых идентификаторов он возвращает страницу профиля, для некоторых он перенаправляет, поэтому вы получаете страницу Facebook, на которой отсутствует содержимое профиля, а для некоторых она возвращает ошибку 404.

Ответ №3:

Работает отлично, пока существует имя пользователя.

Ответ №4:

Вы пытаетесь открыть страницу в веб-браузере или получить доступ к источнику HTML, сгенерированному страницей?

Если последнее, думали ли вы об использовании Facebook Graph API для достижения того, что вы делаете? Это будет намного быстрее, и весь API задокументирован. Кроме того, исходный код HTML страницы может измениться в любой момент времени, в то время как Graph API этого не сделает.

Редактировать

Вы могли бы использовать Graph API, даже не создавая приложение для получения идентификатора пользователя, но перейдя к http://graph.facebook.com/username и анализ ответа JSON. Затем вы можете получить доступ к HTML профиля с помощью http://www.facebook.com/profile.php?id=userId

Комментарии:

1. Я пытаюсь получить доступ к самому источнику HTML. Обратите внимание, что все, что у меня есть, это URL страницы, у меня нет идентификатора, и я предполагаю, что это любая страница, а не страница зарегистрированного пользователя, поэтому не уверен, что Graph API будет работать в этом случае.

2. Ах, да, вы не можете получить исходный код HTML из Graph API. Graph API может получать страницу по URL-адресу точно так же, как и обычную страницу — graph.facebook.com/username

3. graph.facebook.com/username возвращает список JSON с некоторой информацией, такой как идентификатор пользователя. Это хороший момент для получения идентификатора пользователя. Спасибо.

4. Да, предполагая, что вы можете получить доступ profile.php?id=XXX , вы могли бы получить идентификатор пользователя из Graph API, а затем запросить эту страницу. Я отредактирую свой ответ.

5. Хороший момент, но я действительно заметил, что некоторые из profile.php?id=XXX также имеют ту же проблему!