2017-10-12 129 views
-1

我試圖從API下載csv數據,然後編輯我正在努力獲得不同的功能一起工作。從API下載csv數據

即通過導出鏈接來下載文件,然後通過打開它。

''' 
File name: downloadAWR.py 
Author: Harry&Joe 
Date created: 3/10/17 
Date last modified: 5/10/17 
Version: 3.6 
''' 

import requests 
import json 
import urllib2 
import zipfile 
import io 
import csv 
import os 
from urllib2 import urlopen, URLError, HTTPError 

的getURL()用於創建一個下載鏈接CSV數據,一個鏈接將用戶輸入的數據在這種情況下創建的名稱和日期,這將然後創建一個我們可以用一個鏈接下載數據。鏈接存儲在export_link

def geturl(): 

#getProjectName 
project_name = 'BIMM' 

#getApiToken 
api_token = "API KEY HERE" 

#getStartDate 
start_date = '2017-01-01' 

#getStopDate 
stop_date = '2017-09-01' 

url = "https://api.awrcloud.com/get.php?action=export_ranking&project=%s&token=%s&startDate=%s&stopDate=%s" % (project_name,api_token,start_date,stop_date) 

export_link = requests.get(url).content 

return export_link 

dlfile用於實際使用鏈接獲取文件,我們可以操縱和編輯例如刪除列和一些數據。

def dlfile(export_link): 
# Open the url 
try: 
    f = urlopen(export_link) 
    print ("downloading " + export_link) 

    # Open our local file for writing 
    with open(os.path.basename(export_link), "wb") as local_file: 
     local_file.write(f.read()) 

#handle errors 
except HTTPError as e: 
    print ("HTTP Error:", e.code, export_link) 
except URLError as e: 
    print ("URL Error:", e.reason, export_link) 

return f 

readdata用於進入文件並打開它供我們使用。

def readdata(): 
    with zipfile.ZipFile(io.BytesIO(zipdata)) as z: 
     for f in z.filelist: 
      csvdata = z.read(f) 

#reader = csv.reader(io.StringIO(csvdata.decode())) 



def main(): 
#Do something with the csv data 

    export_link = (geturl()) 


    data = dlfile(export_link) 

    csvdata = data.readdata() 



if __name__ == '__main__': 
    main() 

一般我發現代碼工作,但獨立的鬥爭,當我試圖把它放在一起同步。

+0

歡迎計算器。我可以建議你閱讀這個:https://stackoverflow.com/help/how-to-ask並編輯你的問題到更小的東西。在此之前-1 –

回答

1

您需要清理並適當地調用您的代碼。看起來你從不同的來源複製粘貼,現在你有一些沙拉碗混合不好的代碼。

如果任務僅僅是讀取和開放遠程文件做一些事情吧:

import io 
import zipfile 
import requests 

def get_csv_file(project, api_token, start_date, end_date): 
    url = "https://api.awrcloud.com/get.php" 
    params = {'action': 'export_ranking', 
      'project': project, 
      'token': api_token, 
      'startDate': start_date, 
      'stopDate': end_date} 

    r = requests.get(url, params) 
    r.raise_for_status() 

    return zipfile.ZipFile(io.BytesIO(request.get(r.content).content)) 

def process_csv_file(zip_file): 
    contents = zip_file.extractall() 
    # do stuff with the contents 

if __name__ == '__main__': 
    process_zip_file(get_csv_file('BIMM', 'api-key', '2017-01-01', '2017-09-01'))