2016-09-04 5 views
1

markitondemand InteractiveChart APIを使用するためにリクエストを正しくフォーマットする際に問題があります。どのようにこれを正しく行うことができますか?Python:適切なhttpリクエストにmarkit on demand apiを使用してJSONパラメータを適切にフォーマットする

参照:ここでhttp://dev.markitondemand.com/MODApis/

が適切な要求の例である:ここで

http://dev.markitondemand.com/MODApis/Api/v2/InteractiveChart/json?parameters=%7B%22Normalized%22%3Afalse%2C%22NumberOfDays%22%3A10%2C%22DataPeriod%22%3A%22Day%22%2C%22Elements%22%3A%5B%7B%22Symbol%22%3A%22AAPL%22%2C%22Type%22%3A%22price%22%2C%22Params%22%3A%5B%22c%22%5D%7D%5D%7D 

は要求を構築する私のコードです:私がログインしたときに

import requests 
import json   
url2 = 'http://dev.markitondemand.com/MODApis/Api/v2/InteractiveChart/json' 
elements = [ 
     { 
      'Symbol': 'GOOG', 
      'Type': 'price', 
      'Params': {'price': ['c']}, 
     } 
    ] 

req_obj = { 
    'Normalized': 'false', 
    'NumberOfDays': 3, 
    'DataPeriod': 'Day', 
    'Elements': elements 
} 

resp = requests.get(url2, params={'parameters': json.dumps(req_obj)}) 

、ここでは出力されresp.url:

http://dev.markitondemand.com/MODApis/Api/v2/InteractiveChart/json?parameters=%7B%22Elements%22%3A+%5B%7B%22Type%22%3A+%22price%22%2C+%22Params%22%3A+%7B%22price%22%3A+%5B%22c%22%5D%7D%2C+%22Symbol%22%3A+%22GOOG%22%7D%5D%2C+%22NumberOfDays%22%3A+3%2C+%22DataPeriod%22%3A+%22Day%22%2C+%22Normalized%22%3A+%22false%22%7D 

ここで何が間違っていますか?

答えて

0

あなたURLのparamsとロジックはあなたが望むものを、間違っているのである

In [12]: import requests 

In [13]: import json 

In [14]: url2 = 'http://dev.markitondemand.com/MODApis/Api/v2/InteractiveChart/json' 

In [15]: elements = [ 
    ....:   { 
    ....:    'Symbol': 'GOOG', 
    ....:    'Type': 'price', 
    ....:    "Params":["c"] 
    ....:   } 
    ....:  ] 

In [16]: req_obj = {"parameters": {'Normalized': 'false', 
    ....: 
    ....:  'NumberOfDays': 3, 
    ....:  'DataPeriod': 'Day', 
    ....:  'Elements': elements 
    ....: }} 

In [17]: from urllib import urlencode 

In [18]: resp = requests.get(url2, params=urlencode(req_obj)) 


In [19]: print(resp.json()) 
{u'Positions': [0, 1], u'Dates': [u'2016-09-01T00:00:00', u'2016-09-02T00:00:00'], u'Labels': None, u'Elements': [{u'Currency': u'USD', u'Symbol': u'GOOGL', u'Type': u'price', u'DataSeries': {u'close': {u'maxDate': u'2016-09-02T00:00:00', u'max': 796.46, u'minDate': u'2016-09-01T00:00:00', u'values': [791.4, 796.46], u'min': 791.4}}, u'TimeStamp': None}]} 

をあなたはなどもPythonのブール値を保つことができます..内部データだけでダンプを呼び出す:

req_obj = {'Normalized': False, 

    'NumberOfDays': 3, 
    'DataPeriod': 'Day', 
    'Elements': elements 
} 

resp = requests.get(url2, params={'parameters': json.dumps(req_obj)}) 

しかし、文字列を使用してダンプを忘れるのは簡単です。

+0

ありがとうございました! Python3をやっている人なら、urllib - > urllib.parseを作成してください。 –

+0

最後の例のようにダンプを使うこともできますが、外側のdictで呼び出す必要はありません。 –

0

(それのルックスによって)あなたのURLのエンドポイントは、単に次のようになります。

url2 = 'http://dev.markitondemand.com/MODApis/Api/v2/InteractiveChart 

次に、あなたの要求を行います。その後

resp = requests.get(url2, params=json.dumps({'parameters': req_obj})) 

requestsが正しく?と任意の&場合を処理します彼らは必要でした。私たちは、コード実行した場合

url2 = 'http://dev.markitondemand.com/MODApis/Api/v2/InteractiveChart/json' 
elements = [ 
     { 
      'Symbol': 'GOOG', 
      'Type': 'price', 
      "Params":["c"] # not 'Params': {'price': ['c']} 
     } 
    ] 

req_obj = {"parameters": {'Normalized': 'false', 

    'NumberOfDays': 3, 
    'DataPeriod': 'Day', 
    'Elements': elements 
}} 

from urllib import urlencode 
resp = requests.get(url2, params=urlencode(req_obj)) 
print(resp.json()) 

+0

あなたが置いたものを修正することは、それを正しいものに近づけさせる、と私は思うが、それほど正しいものではない。 resp = requests.get(url2、params = {'parameters':json.dumps(req_obj)}) http://dev.markitondemand.com/MODApis/Api/v2/InteractiveChart/json?parameters=%7B %22Elements%22%3A +%5B%7B%22Type%22%3A +%22price%22%2C +%22Params%22%3A +%7B%22price%22%3A +%5B%22c%22%5D%7D%2C +%22Symbol 22%3A +%22GGG%22%7D%5D%2C +%22NumberOfDays%22%3A + 3%2C +%22DataPeriod%22%3A +%22Day%22%2C +%22標準化%22%3A +%22false%22D 7D –

+0

@ dbs.83私はそれをあなたに残しておきます...ドキュメントによると - 上記はあなたが望むものです...送信された実際のデータで少しばかげているかもしれませんが、それはあなた次第です。あなたはURLの末尾から 'json'を削除しましたか?それはドキュメントによっては必要ではないので...別のエンドポイントにヒットしようとしています –

+0

私はjsonの有無にかかわらず試しました役立たず。私が一歩近づくのを助けてくれてありがとう。 –

関連する問題