3

我正在尝试按照以下示例进行批处理:http: //developers.facebook.com/docs/reference/ads-api/batch-requests/

具体来说,curl 命令:

  curl -F 'access_token=____' 
    -F 'batch=[
               {
                "method": "POST",
                "relative_url": "6004251715639",
                "body": "redownload=1&max_bid=35"
               },
               {
                "method": "POST",
                "relative_url": "6004251716039",
                "body": "redownload=1&max_bid=35"
               },
               {
                "method": "POST",
                "relative_url": "6004251715839",
                "body": "redownload=1&max_bid=35"
               }
              ]' https://graph.facebook.com

工作正常。

当我尝试在 python 中使用 urllib2 时,我不知道如何模拟“-F”标志。

当它是单个请求的“-d”时,我知道该怎么做:

curl -d  "name=Chm&daily_budget=1000&lifetime_budget=10000
&campaign_status=1" "https://graph.facebook.com/
act_368811234/adcampaigns?access_token=___"

我使用python代码模拟了它:

def sendCommand(self, url, dataForPost=None):        
    if dataForPost == None:
        req = urllib2.Request(url)
    else:
        req = urllib2.Request(url, dataForPost)        
    jar = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
    content = opener.open(req)
    response = content.read()
    return response

如何模拟上面的 -F 命令?

4

2 回答 2

2

您的sendCommand功能应该可以工作。dataForPost 需要一个字典。如果你通过它下面的一个,它将复制 access_token 和批处理的 -F 函数。我正在使用"""字符串文字并去除空格。您可以将其保留,但 urllib2 会尝试对其进行 url 编码,这可能会使调试变得更加困难。您可以尝试使用 json 库来生成批处理值。

dataForPost = {'access_token' : '____',  
               'batch' : """[
               {
                "method": "POST",
                "relative_url": "6004251715639",
                "body": "redownload=1&max_bid=35"
               },
               {
                "method": "POST",
                "relative_url": "6004251716039",
                "body": "redownload=1&max_bid=35"
               },
               {
                "method": "POST",
                "relative_url": "6004251715839",
                "body": "redownload=1&max_bid=35"
               }
              ]""".replace('\n', '').replace('\t', '').replace(' ', '')}
于 2012-06-07T22:01:03.607 回答
-1

对于 Python,我们可以使用Facepy来获取批量请求的功能和处理 Facebook Graph API 的分页。

根据 facebook,graph api 一次需要 50 个请求,但 facepy 会为我们处理,即我们可以将尽可能多的请求附加到列表中并对其进行批处理。

from facepy import GraphAPI
access = <access_token>
batch1=[
    {'method': 'GET', 'relative_url': 'me/accounts'}
]
graph = GraphAPI(access)
data= graph.batch(batch1)

for i in data:
    print i
于 2015-03-24T15:46:57.123 回答