2013-03-06 37 views
0

我需要連接到RESTful API。公司給我連接到他們的API的唯一例子就是Python中的一個例子。我不懂這門語言,但對PHP很滿意。有沒有辦法可以用cuRL和/或PHP來做到這一點?將python API示例轉換爲PHP

這裏是在Python的例子:

import requests 
import hmac 
import hashlib 
import datetime as dt 
import simplejson as json 
import sys 


tech_prefix = '' #the Account Tech Prefix 
secret_key = '' #the API Key 


#creating URI info 
t = dt.datetime.utcnow().replace(microsecond=0) 
timestamp = t.isoformat() 
url_scheme = 'https' 
net_location = 'api.thesite.com' 
path = '/v1/available-tns/npas/' 
method = 'GET' 
ordered_query_params = '' 
body = '' 
body_md5 = '' 
canonical_uri = url_scheme + "://" + net_location + path + "\n" + ordered_query_params 
tokens = (
    timestamp, 
    method, 
    body_md5, 
    canonical_uri 
    ) 
message_string = u'\n'.join(tokens).encode('utf-8') 
signature = hmac.new(secret_key, message_string, digestmod=hashlib.sha1).hexdigest() 

headers = {'X-Timestamp':timestamp} 
request_url = url_scheme + '://' + net_location + path + '?' + ordered_query_params # append ordered query params here 
request = requests.get(request_url,auth=(tech_prefix,signature),headers=headers) 
print request 

回答

2

是的,你可以在PHP中做到這一點。這個python代碼不使用任何特殊的python庫;它只是發送一個帶有特定頭文件和特定認證信息的HTTP請求。實際上,將這段代碼從python轉換成PHP不屬於典型的StackOverflow答案的範圍。

+0

+1爲了確保它是可能的,但沒有這樣做。 – 2013-03-06 00:59:10

+0

謝謝,我經常使用curl,但是使用這個APIs auth需要時間戳和散列api key來發回一個響應代碼,我輸了。我想我確實需要將此代碼轉換爲PHP或基於此代碼的捲曲示例。 – 2013-03-06 01:08:55

0

首先,「進口」只是外部庫,PHP內置了它們。一切都達到令牌只是變量。日期和時間方法在PHP中都有類似的功能。然後「令牌」只是一個數組。然後,「message_string」有一個「連接」和「編碼」方法,這些方法類似於您在JavaScript中可以找到的方法。 「簽名」有點混亂,但它基本上做了一個加密和PHP具有類似的功能。 Python是有據可查的,所以查看Python的函數,然後你應該能夠找出哪個PHP函數是相似的。在「簽名」之後,它只是將所有變量組裝到HTTP請求中併發送它。

Python和PHP(和JavaScript)是基於C的語言。如果你對一個人有好處,你可以找出另一個人,只要你有很好的參考資料。正如Python所記載的那樣,所以谷歌搜索Python方法或函數應該能夠找到你需要的信息來找到它的PHP等價物。

API的工作從來沒有樂趣,但它們並非不可能。他們中的大多數都會分解爲僅僅需要組裝的HTTP請求,然後解析響應。一個小技巧,有時你可以在API的文檔或他們的論壇中找到(如果他們有他們的話),或者技術支持人員會給你發送HTTP請求的例子。然後你可以用PHP構建它。

作爲結束語,最好學習如何在語言之間進行轉換。聽起來這是你的第一次體驗,但大多數web開發人員經常遇到這種情況,並且遇到了各種不同的語言(python,C++,asp,ruby等)。根據我過去遇到的情況,你的轉換很簡單。我非常喜歡將它作爲我必須使用的最後一個API的示例。