Невозможно получить результаты поиска со стороны сервера: API Graph Facebook с использованием Python - PullRequest
2 голосов
/ 10 января 2011

Я провожу некоторое простое обучение Python + FB Graph и столкнулся со странной проблемой:

import time
import sys
import urllib2
import urllib
from json import loads

base_url = "https://graph.facebook.com/search?q="
post_id = None
post_type = None
user_id = None 
message = None
created_time = None

def doit(hour):
    page = 1
    search_term = "\"Plastic Planet\""
    encoded_search_term = urllib.quote(search_term)
    print encoded_search_term
    type="&type=post"
    url = "%s%s%s" % (base_url,encoded_search_term,type)
    print url
    while(1):

        try:
            response = urllib2.urlopen(url)
        except urllib2.HTTPError, e:
            print e
        finally:
            pass   

        content = response.read()
        content = loads(content)

        print "=================================="
        for c in content["data"]:
            print c
            print "****************************************"

        try:
            content["paging"]
            print "current URL"
            print url
            print "next page!------------"
            url = content["paging"]["next"]
            print url
        except:
            pass
        finally:
            pass

        """
        print "new URL is ======================="
        print url
        print "==================================" 
        """
        print url

Я пытаюсь сделать это, чтобы автоматически пролистать результаты поиска, но пытается найти контент ["paging"] ["next"]

Но странно то, что данные не возвращаются;Я получил следующее:

{"data":[]}

Даже в самом первом цикле.

Но когда я скопировал URL в браузер, многие результаты были возвращены.

Я также попробовал версию с моим токеном доступа, и то же самое происходит.

+++++++++++++++++++ EDITED и SIMPLIFIED ++++++++++++++++++

хорошо, благодаря TryPyPy, вот упрощенная и отредактированная версия моего предыдущего вопроса:

Почему это так:

   import urllib2
       url = "https://graph.facebook.com/searchq=%22Plastic+Planet%22&type=post&limit=25&until=2010-12-29T19%3A54%3A56%2B0000"
       response = urllib2.urlopen(url)
       print response.read() 

приводит к {"data":[]}?

Нотот же URL производит много данных в браузере?

1 Ответ

1 голос
/ 10 января 2011

Метод проб и ошибок с использованием Chrome (где я получил много данных) и Firefox (где я получил пустой ответ) заставил меня обнулить заголовок «Accept-Language».Другие модификации предположительно только косметические, но я не уверен насчет CookieJar.

import time
import sys
import urllib2
import urllib
from json import loads
import cookielib

base_url = "https://graph.facebook.com/search?q="
post_id = None
post_type = None
user_id = None 
message = None
created_time = None

jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
opener.addheaders = [
    ('Accept-Language', 'en-US,en;q=0.8'),]

def doit(hour):
    page = 1
    search_term = "\"Plastic Planet\""
    encoded_search_term = urllib.quote(search_term)
    print encoded_search_term
    type="&type=post"
    url = "%s%s%s" % (base_url,encoded_search_term,type)

    print url

    data = True
    while data:
        response = opener.open(url)
        opener.addheaders += [
            ('Referer', url) ]

        content = response.read()
        content = loads(content)

        print "=================================="
        for c in content["data"]:
            print c.keys()
        print "****************************************"

        if "paging" in content:
            print "current URL"
            print url
            print "next page!------------"
            url = content["paging"]["next"]
            print url
        else:
            print content
            print url
            data = False

doit(1)

Вот исправленная минимальная рабочая версия:

import urllib2
import urllib
from json import loads
import cookielib

def doit(search_term, base_url = "https://graph.facebook.com/search?q="):
    opener = urllib2.build_opener()
    opener.addheaders = [('Accept-Language', 'en-US,en;q=0.8')]

    encoded_search_term = urllib.quote(search_term)
    type="&type=post"
    url = "%s%s%s" % (base_url,encoded_search_term,type)

    print encoded_search_term
    print url

    data = True
    while data:
        response = opener.open(url)

        content = loads(response.read())

        print "=================================="
        for c in content["data"]:
            print c.keys()
        print "****************************************"

        if "paging" in content:
            url = content["paging"]["next"]
        else:
            print "Empty response"
            print content
            data = False

doit('"Plastic Planet"')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...