2016-04-20 88 views
2

無法使用python程序從zamzar api下載轉換後的文件,如https://developers.zamzar.com/docs中指定的,但是因爲我正確使用代碼以及API密鑰。它只顯示錯誤代碼:20.在這個錯誤後面浪費了4小時,有人請。Zamzar API下載失敗

import requests 
from requests.auth import HTTPBasicAuth 

file_id =291320 
local_filename = 'afzal.txt' 
api_key = 'my_key_of_zamzar_api' 
endpoint = "https://sandbox.zamzar.com/v1/files/{}/content".format(file_id) 

response = requests.get(endpoint, stream=True, auth=HTTPBasicAuth(api_key, '')) 

try: 
    with open(local_filename, 'wb') as f: 
    for chunk in response.iter_content(chunk_size=1024): 
     if chunk: 
     f.write(chunk) 
     f.flush() 

    print("File downloaded") 

except IOError: 
    print("Error") 

這是我用來下載轉換文件的代碼。

+1

請複製完整的輸出/回溯。 –

回答

2

此代碼很容易地轉換文件成不同的格式:

import requests 
from requests.auth import HTTPBasicAuth 
#--------------------------------------------------------------------------# 
api_key = 'Put_Your_API_KEY' #your Api_key from developer.zamzar.com 
source_file = "tmp/armash.pdf" #source_file_path 
target_file = "results/armash.txt" #target_file_path_and_name 
target_format = "txt" #targeted Format. 
#-------------------------------------------------------------------------# 



def check(job_id,api_key): 
    check_endpoint = "https://sandbox.zamzar.com/v1/jobs/{}".format(job_id) 
    response = requests.get(check_endpoint, auth=HTTPBasicAuth(api_key, '')) 
    #print(response.json()) 
    #print(response.json()) 
    checked_data=response.json() 
    value_list=checked_data['target_files'] 
    #print(value_list[0]['id']) 
    return value_list[0]['id'] 

def download(file_id,api_key,local_filename): 
    downlaod_endpoint = "https://sandbox.zamzar.com/v1/files/{}/content".format(file_id) 
    download_response = requests.get(downlaod_endpoint, stream=True, auth=HTTPBasicAuth(api_key, '')) 
    try: 
     with open(local_filename, 'wb') as f: 
     for chunk in download_response.iter_content(chunk_size=1024): 
      if chunk: 
      f.write(chunk) 
      f.flush() 

     print("File downloaded") 

    except IOError: 
     print("Error") 


endpoint = "https://sandbox.zamzar.com/v1/jobs" 
file_content = {'source_file': open(source_file, 'rb')} 
data_content = {'target_format': target_format} 
res = requests.post(endpoint, data=data_content, files=file_content, auth=HTTPBasicAuth(api_key, '')) 
print(res.json()) 
data=res.json() 
#print(data) 
print("=========== Job ID ============\n\n") 
print(data['id']) 
target_id=check(data['id'],api_key) 
print("\n================= target_id ===========\n\n") 
print(target_id) 
download(target_id,api_key,target_file) 

希望這口井有人!

2

我是Zamzar API的首席開發人員。

所以Zamzar API文檔包含一個關於錯誤代碼的部分(參見https://developers.zamzar.com/docs#section-Error_codes)。爲你的錯誤的相關代碼:

{ 「消息」: 「API密鑰缺失或無效」, 「代碼」:20 }

這可能意味着要麼那您沒有在所有中指定API密鑰,該API密鑰對您嘗試下載的文件無效。由於您的代碼包含一個api_key變量,因此它似乎更可能是後者。在你的代碼

尋找它可能是你已經使用了作業ID(291320)嘗試和下載文件的時候,其實你應該使用文件ID

每個轉換作業都可以輸出1個或多個轉換後的文件,您需要指定您想要抓取的文件的文件ID。通過查詢​​並查看target_files陣列,您可以查看所有已轉換文件ID的列表。這是在API文檔在https://developers.zamzar.com/docs#section-Download_the_converted_file

概述所以,如果你改變你的代碼從target_files陣列作業的使用文件ID您的下載應春到生活。

對不起,你浪費時間在這個。顯然,如果它已經達到S.O.我們的文檔在解釋這個區別方面做得不夠好,所以我們會看看我們能做些什麼來使它們更清晰。

開心轉換!

+0

是的,我以後遇到問題。浪費了2小時後。下面我也發佈瞭解決方案。我後來發現。以下答案是將文件轉換爲下載文件的完整解決方案腳本。看一看! –