새로운 비즈니스 자격 증명을 무료 사용자 API 키와 함께 사용하여 요청을 작성하는 데 사용한 Python-Requests 모듈에 통합하는 데 문제가 있습니다.파이썬 요청에 대한 비즈니스 인증 문제를위한 Google지도
Google은 (1) 기본 URL을 경로로 구문 분석하고 부분을 쿼리 (2)이 비공개 키를 디코딩하여 (3)이 개인 키와 URL을 사용하여 서명을 생성하는 인증 방법을 따라 왔습니다. 다음과 같이 내 코드는 base64로
를 사용하여 이진 서명을 인코딩 HMAC SHA1 (4)를 사용하여 인코딩 된 문자열 -
import requests
import csv
import json
import urlparse
import hashlib
import base64
import hmac
from pprint import pprint
url_raw = 'https://maps.googleapis.com/maps/api/directions/json&client=REMOVED'
Private_Key = 'REMOVED'
with open('./Origins.csv', 'rU') as csvfile:
reader = csv.DictReader(csvfile)
origincoords = ['{Y},{X}'.format(**row) for row in reader]
with open('./Destinations.csv', 'rU') as csvfile:
reader = csv.DictReader(csvfile)
destinationcoords = ['{Y},{X}'.format(**row) for row in reader]
results=[]
url = urlparse.urlparse('url_raw')
url_to_sign = url.path + '?' + url.query
decodedKey = base64.urlsafe_b64decode(Private_Key)
signature = hmac.new(decodedKey, url_to_sign, hashlib.sha1)
encodedSignature = base64.urlsafe_b64encode(signature.digest())
originalUrl = url.scheme + "://" + url.netloc + url.path + '?' + url.query
Full_URL = originalUrl + "&signature=" + encodedSignature
for i in range(0,(len(origincoords))):
params ={'origin': origincoords[i],
'destination': destinationcoords[i],
'encodedSignature': encodedSignature}
directions = requests.get(Full_URL, params=params).json()
results.append(directions)
이 시점에서 나는 내 연구에 대한 관련 정보의 결과를 분석합니다. 이전에 도움을 주신 @fredtantini에게 감사드립니다.
현재 유효한 스키마를 사용하고 있지 않다는 오류 메시지가 requests.exception과 관련되어 있습니다. 그러나, 내 코드에서 url.scheme을 originalUrl 변수에 포함 시켰습니다. originalUrl 변수는 요청 생성에 사용 된 Full_URL의 일부를 구성합니다.
많은 감사 @Martijn. 나는 그것을 지금 본다. 불행히도 이제는 ValueError가 발생합니다 : No JSON 객체가 디코딩 될 수 있습니다 ' – LearningSlowly
@LearningSlowly : 그러면 * 무엇이 반환 되었습니까? 'response = requests.get (Full_URL, params = params)'를 사용하고,'response.headers'와'response.content'를보고 Google이 당신에게 무엇을 보냈는지 확인하십시오. –
불행히도, 나는 Google에서 아무것도 얻지 못한다고 생각하지 않습니다. 오류가 줄에 있음 - 방향 = requests.get (Full_URL, params = params) .json() 요청이 실제로 전송되는 곳 – LearningSlowly