2

Python で POST 経由で Freebase の mqlread リクエストを送信することは可能ですか? ドキュメントを検索しようとしましたが、すべてが GET を参照しています。ありがとう。

4

2 に答える 2

3

可能です。

POSTa を発行し、特定のヘッダーを追加する必要があります (基本的に、サーバーに のコンテンツでX-HTTP-Method-Override: GETをエミュレートするように指示します)。特に私にとっては、を使用しました。GETPOSTContent-Encoding: application/x-www-form-urlencode

それが役立つ場合、これが私のコード(coffeescript)の関連部分です:

mqlread = (query, queryEnvelope, cb) ->

    ## build URL
    url = urlparser.format
        protocol: 'https'
        host: 'www.googleapis.com'
        pathname: 'freebase/v1/mqlread'

    ## build POST body
    queryEnvelope ?= {}
    queryEnvelope.key = config.GOOGLE_API_SERVER_KEY
    queryEnvelope.query = JSON.stringify query

    options =
        url: url
        method: 'POST'
        headers:
            'X-HTTP-Method-Override': 'GET'
            'User-Agent': config.wikipediaScraperUserAgent
        timeout: 3000
        form: queryEnvelope

    ## invoke API
    request options, (err, response, body) ->
        if err then return cb err
        if response.statusCode != 200
            try
                json = JSON.parse(body)
                errmsg = json?.error?.message or "(unknown JSON)"
            catch e
                errmsg = body?[..50]
            return cb "#{response.statusCode} #{errmsg}"
        r = JSON.parse response.body
        decodeStringsInResponse r
        cb null, r
于 2013-09-20T04:32:20.320 に答える
0

MQLread では POST がサポートされていないと思いますが、HTTP バッチ機能を使用できます。

Python での例を次に示します。

https://github.com/tfmorris/freebase-python-samples/blob/master/client-library/mqlread-batch.py

于 2013-09-19T23:45:09.163 に答える