python - 无法从服务器端检索搜索结果 : Facebook Graph API using Python

标签 python facebook-graph-api

我正在自己做一些简单的 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

我在这里要做的是自动翻阅搜索结果, 但尝试 content["paging"]["next"]

但是奇怪的是没有返回任何数据;我收到了以下内容:

{"data":[]}

即使在第一个循环中也是如此。

但是当我将网址复制到浏览器中时,返回了很多结果。

我也尝试过使用我的访问 token 的版本,同样的事情发生了。

++++++++++++++++++++编辑和简化++++++++++++++++++

好的,感谢 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 在浏览器中会产生大量数据?

最佳答案

使用 Chrome(我得到大量数据)和 Firefox(我得到空响应)的试验和错误使我在“接受语言” header 上为零。其他修改据说只是装饰性的,但我不确定 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"')

关于python - 无法从服务器端检索搜索结果 : Facebook Graph API using Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4644336/

相关文章:

python - 如何将小部件放入 PyQt QMdiSubWindow 中

android - 使用 graph api 2.2 从 android 中的 facebook sdk 4.0.1 获取好友列表

javascript - Facebook Graph API - 使用 JavaScript 上传照片

iPhone以编程方式选择Tab并推送 View Controller

python - 如何计算季度差异并用python中的计数添加缺失的季度

python - 如何有效地检查一个字符串是否至少包含两个列表中的一个元素

python - 在类级别使用装饰器注册方法

Python属性错误: 'module' object has no attribute 'Serial'

facebook - 通过开放图谱api获取FB页面的对话

facebook - 有人可以结束 "LEAVE APP"的痛苦吗!