#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 также имеют ту же проблему!