2011-12-23 7 views
4

長い時間リスナー、初めて発信者..カテゴリや場所別にFacebookページのFQLレスポンスを解析する方法は? (パイソン)

私は私のFacebookのオープングラフ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、私はまだ緑だとこれらの面で助けを必要とする:

  1. (私は、このような「ローカルビジネス」などの特定のカテゴリに一致する要求だけページ、してみたいが、「カテゴリ」はリストであるため、とそれはFBで索引付けされていません私はそれを理解するのに苦労している。私はそれが可能ではないと仮定しています。

  2. だから私は、人が好きなすべてのページの完全な爆発を取得し、後でそれを並べ替える必要があります。 (これは両方のリストがあり、カテゴリおよび/または場所によってフィルタリング)と私の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

とすぐ、私はリストを操作しようとして、私は(ページマッチング名=「thesocialbusiness」のような)単一の結果を送信することができなく私が探している一連の結果。私のビジョンは、位置によって分類され、ソートされたページの素敵な絵本サムネイルビューを持つことです。私が正しく理解していれば

感謝と幸せな休日、

-James

答えて

1

、あなたはちょうどここに最終結果をフィルタリングするために探していますか?あなたがまだの場合は、先に行くとあなたが戻ってサービスから取得することがありますものです負荷文字列ためのPythonオブジェクトに

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

loadsスタンドをJSON文字列に変換します。ここからいくつかの選択肢があります。 1つの選択肢は、あなたが欲しいカテゴリを手前で知っている場合には、内蔵のfilterを使用することです。例えば乗り以下のデータは、あなたが再利用可能な機能は、あなたが

ような何かを行うことができ、さまざまなカテゴリをフィルタリングしたい場合だけなので

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']}] 

ようbカテゴリが含まれている結果を絞り込むことができ

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

を設定しました

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

+0

感謝を使用することです、私はあなたの助けに感謝し、さまざまなオプション、特に再利用可能な機能。私はそれと一緒に行くと思っています。 –

+0

初期ロード機能で何か不思議なことが起きているようです - このエラーはjson.load行から得られます:fbtest2 = json.loads(fbtest) ファイル "C:\ Python27 \ lib \ json \ __ init__.py" 、行326、ロード中 return _default_decoder.decode ファイル "C:\ Python27 \ lib \ json \ decoder.py"、行366、デコード中 obj、end = self.raw_decode(s、idx = _w (fbtest) –

+0

セット。私はfbtestのデータを見ると、 'u'name':u'The Blacksmith Restaurant '、u'categories':[{u ' 'id':0、u'name ':u'Restaurant/Cafe'}] - たぶん私はある種の 'categories'を使わなければならないでしょう: 'name'フィルター?あなたの助けをありがとう@dskinner – dskinner

関連する問題