1

複数の URL から json データを取得するために grequest を使用しています。ここで別のユーザーの助けを借りて、python に各 URL からの結果を連続して出力させることができました。ここで、これらの結果を DataNitro を使用して Excel に出力したいと考えています。ここに私が今持っているコードがあります。

import grequests
import json


urls = [
    'https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-1ST&type=both&depth=50',
    'https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-AMP&type=both&depth=50',
    'https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-ARDR&type=both&depth=50',
]

requests = (grequests.get(u) for u in urls)
responses = grequests.map(requests)

for response in responses:
    Cell("A1").value = "Buy"
    Cell("A2").value = (response.json()['result']['buy'][0]['Quantity'])
    Cell("A3").value = (response.json()['result']['buy'][0]['Rate'])
    Cell("A4").value = (response.json()['result']['buy'][1]['Quantity'])
    Cell("A5").value = (response.json()['result']['buy'][1]['Rate'])
    Cell("A6").value = (response.json()['result']['buy'][2]['Quantity'])
    Cell("A7").value = (response.json()['result']['buy'][2]['Rate'])
    Cell("A8").value = (response.json()['result']['buy'][3]['Quantity'])
    Cell("A9").value = (response.json()['result']['buy'][3]['Rate'])
    Cell("A10").value = (response.json()['result']['buy'][4]['Quantity'])
    Cell("A11").value = (response.json()['result']['buy'][4]['Rate'])
    Cell("A12").value = "Sell"
    Cell("A13").value = (response.json()['result']['sell'][0]['Quantity'])
    Cell("A14").value = (response.json()['result']['sell'][0]['Rate'])
    Cell("A15").value = (response.json()['result']['sell'][1]['Quantity'])
    Cell("A16").value = (response.json()['result']['sell'][1]['Rate'])
    Cell("A17").value = (response.json()['result']['sell'][2]['Quantity'])
    Cell("A18").value = (response.json()['result']['sell'][2]['Rate'])
    Cell("A19").value = (response.json()['result']['sell'][3]['Quantity'])
    Cell("A20").value = (response.json()['result']['sell'][3]['Rate'])
    Cell("A21").value = (response.json()['result']['sell'][4]['Quantity'])
    Cell("A22").value = (response.json()['result']['sell'][4]['Rate'])
    Cell("A23").value = "----"

これは問題なく動作しますが、1 つの URL を除くすべてをコメント アウトした場合のみです。そうしないと、最初の URL の結果が 2 番目の URL の結果によって上書きされます。しかし、これは私が望むものではありません。最後に、最初の URL の結果をセル A1:A23 に出力し、2 番目の結果をセル B1:B23 に出力し、3 番目の結果をセル C1:C23 に出力します。

これが私が試したことです:

for response in responses:
    #print("Buy")
    Quantity = [response.json()['result']['buy'][0]['Quantity'],
        response.json()['result']['buy'][1]['Quantity'],
        response.json()['result']['buy'][2]['Quantity'],
        response.json()['result']['buy'][3]['Quantity'],
        response.json()['result']['buy'][4]['Quantity']
]
    Cell("A1:E5").vertical = Quantity

(注:ここでは数量のみを試しています)。

これは、最初の URL の結果を列 A にのみ出力し、列 B に移動して後続の結果を出力しないため、機能しません。で切り替えCell("A1:E5").vertical = QuantityてみましCell("A1:E5").vertical_range = Quantityたが、python は以下のエラーを返します。

    Cell("A1:E5").vertical_range = Quantity
  File "27\basic_io.py", line 379, in __setattr__
AttributeError: can't set attribute

私は元のセットアップで何かをすること (つまり、Cell("A2").value = (response.json()['result']['buy'][0]['Quantity'])コードの種類を使用すること) を考えていましたi = 0Cell(23,(1+i)).value = "----". このCell(23,(1+i)).value = "----"行では、セル B1 に "----" が出力され、列 A のすべての結果が再び上書きされます。これは、コードが実際に何を行っているかを確認すると意味があります。

途方に暮れていますが、答えは比較的単純で、見逃しているだけだと思います。このサイトで DataNitro とhttps://datanitro.com/docs/に言及している 9 ページの結果を調べました。答えが見つかりませんでした。助けていただければ幸いです!

編集: 5 を出力してから隣接する列に移動することは問題ではないことに気付きました。すべての結果を上書きせずに Excel に出力するだけです。つまり、すべての結果を 1 つの列に表示することも、すべての結果を 1 つの行に表示することもできます。

それ以来試しました

CellRange((1,1),(1,2)).value = [response.json()['result']['buy'][0]['Quantity'],
response.json()['result']['buy'][0]['Rate']

しかし、同じ問題が発生しています。最初の URL のデータが上書きされるだけです。前もって感謝します。

4

1 に答える 1