编程语言
首页 > 编程语言> > 如何按类别和/或位置解析Facebook页面的FQL响应? (Python)

如何按类别和/或位置解析Facebook页面的FQL响应? (Python)

作者:互联网

长时间听众,第一次来电…

我从Facebook Open Graph API查询得到了很好的结果:

fbtest = graph.request("/fql", {"q": "SELECT name, page_id, categories, location 
FROM page WHERE page_id IN (SELECT page_id FROM page_fan WHERE uid=me())"})

虽然我已经在Learning Python the Hard Way年采取了Zed的伟大课程,但我仍然是绿色的并且在这些方面需要帮助:

>我喜欢只请求与某些类别相匹配的页面,例如“本地商家”,但因为“类别”是一个列表(并且它没有在FB表中编入索引),我很难搞清楚它;我认为这是不可能的.
>所以我找回了一个人喜欢的所有页面,我需要在之后对其进行整理.这就是我在做的事情:

如何操作结果(按类别和/或位置过滤,这两个列表)并以可读格式将它们发送到我的fbtest.html文件?

目前我只是在HTML中呈现fbtest的输出;

self.render("test.html", fbtest=fbtest)

这很难看:

fbtest: {u’data’: [{u’page_id’: 8495417058L, u’name’: u’Mat Zo’,
u’categories’: [], u’location’: {u’street’: u”, u’zip’: u”}},
{u’page_id’: 9980651805L, u’name’: u’deadmau5′, u’categories’: [],
u’location’: {u’street’: u”, u’zip’: u”}}, {u’page_id’: 6209079710L,
u’name’: u’Ultra Records’, u’categories’: [], u’location’: {u’street’:
u”, u’zip’: u”}}, {u’page_id’: 12609724042L, u’name’: u’Oceanlab’,
u’categories’: [], u’location’: {u’street’: u”, u’zip’: u”}}, etc

一旦我尝试操作列表,我就可以发送一个结果(比如匹配name =“thesocialbusiness”的页面),但不是我正在寻找的一系列结果.我的愿景是拥有一个很好的图画书缩略图视图,按页面分类和排序.

谢谢,节日快乐,

-詹姆士

解决方法:

如果我理解正确,你只是想在这里过滤最终结果?如果还没有,请继续将json字符串转换为python对象

import json
resp = json.loads(fql_resp)
data = resp['data']

负载代表负载串,这是您将从服务中获得的.从这里你有几个选择.如果您事先知道您想要的类别,可以选择使用内置过滤器.以下面的数据集为例

objs = [{'_id': 1, 'categories': ['a', 'b', 'c']},
        {'_id': 2, 'categories': ['b']},
        {'_id': 3, 'categories': ['c']}]

您可以过滤仅包含b类别的结果

def f(obj):
    return 'b' in obj['categories']

filtered_objs = filter(f, objs)
print(filtered_objs)
# outputs:
# [{'_id': 1, 'categories': ['a', 'b', 'c']},
#  {'_id': 2, 'categories': ['b']}]

如果你想要一个可重用的函数来过滤不同的类别,你可以做类似的事情

def filter_objs(objs, category):
    result = []
    for obj in objs:
        if category in obj['categories']:
            result.append(category)
    return result

filtered_objs = filter_objs(objs, 'b')

最后,您可以使用列表推导,根据需要内联或在filter_objs函数中使用.

filtered_objs = [obj for obj in objs if 'b' in obj['categories']]

所以有很多方法可以过滤结果,但第一步是使用json.loads

标签:python,facebook,facebook-opengraph,facebook-fql
来源: https://codeday.me/bug/20190709/1417180.html