长时间听众,第一次打电话......
我从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'数据&#39 ;: [{U' PAGE_ID&#39 ;: 8495417058L中,u'名称&#39 ;: U'马特·索&#39 ;, 你的类别':[],你的位置':{你'街道':你'',你' zip':你& #39;'}}, {u' page_id':9980651805L,u' name&#39 ;: u' deadmau5',u' category':[], 你的位置':{u' street':你'' zip':你'}},{u& #39; page_id':6209079710L, 你的名字':你的超级记录',你的类别':[],你的位置':{u' street': U'&#39 ;, U'拉链&#39 ;: U''}},{U' PAGE_ID&#39 ;: 12609724042L中,u'名称&#39 ;: U' Oceanlab&#39 ;, 你的类别':[],你的位置':{你'街道':你'',你' zip':你& #39;'}}等等
一旦我尝试操作列表,我就可以发送一个结果(比如匹配名称的页面="社会商业")但不是我要找的一系列结果。我的愿景是拥有一个很好的图画书缩略图视图,按页面分类和排序。
谢谢,节日快乐,
-James
答案 0 :(得分:1)
如果我理解正确,您只是想在此处过滤最终结果?如果还没有,请继续将json字符串转换为python对象
import json
resp = json.loads(fql_resp)
data = resp['data']
loads
代表加载字符串,这是您将从服务中获取的内容。从这里你有几个选择。如果你事先知道你想要什么类别,一种选择是使用内置filter
。例如,以下数据集
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