Я написал этот скрипт, который использует ystockquote-master для очистки API Yahoo Finance для цены и рыночной капитализации. Это очень просто и хорошо работает на моем компьютере, однако, когда я пытаюсь использовать его на своих друзьях mac, я получаю сообщение об ошибке. Это очень длинный, поэтому я выложу его в конце. Я изо всех сил пытался узнать, что происходит, поэтому я повернулся сюда. Предыстория: от новичка до новичков. Вот отрывок из моего кода:Python URL Request Yahoo API
try:
# py3
from urllib.request import Request, urlopen
from urllib.parse import urlencode
except ImportError:
# py2
from urllib2 import Request, urlopen
from urllib import urlencode
def _request(symbol, stat):
url = 'http://finance.yahoo.com/d/quotes.csv?s=%s&f=%s' % (symbol, stat)
req = Request(url)
resp = urlopen(req)
return str(resp.read().decode('utf-8').strip())
def get_price(symbol):
return _request(symbol, 'l1')
def get_market_cap(symbol):
return _request(symbol, 'j1')
i = 0
while i<len(NewSymbolsList):
results = open("intermediateresults.csv", "a")
api = [get_price(NewSymbolsList[i]),get_market_cap(NewSymbolsList[i])]
api = re.sub("\[\'|\'|\]", "", str(api))
results.write(str(NewSymbolsList[i]) +"," +str(api) +"\n")
print NewSymbolsList[i], api
i+=1
results.close()
Здесь ошибка я получаю от моих друзей Mac:
cd '/Users/JW/Desktop/market cap/' && '/usr/local/bin/pythonw' -t ' /Users/JW/Desktop/market cap/MarketCap_Scan.py' && echo Exit status: $? && exit 1
JWs-MacBook-Pro:~ JW$ cd '/Users/JW/Desktop/market cap/' && '/usr/local/bin/pythonw' -t '/Users/JW/Desktop/market cap/MarketCap_Scan.py' && echo Exit status: $? && exit 1
Traceback (most recent call last):
File "/Users/JW/Desktop/market cap/MarketCap_Scan.py", line 33, in <module>
api = [get_price(NewSymbolsList[i]),get_market_cap(NewSymbolsList[i])]
File "/Users/JW/Desktop/market cap/MarketCap_Scan.py", line 18, in get_price
return _request(symbol, 'l1')
File "/Users/JW/Desktop/market cap/MarketCap_Scan.py", line 15, in _request
resp = urlopen(req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 410, in open
response = meth(req, response)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 523, in http_response
'http', request, response, code, msg, hdrs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 442, in error
result = self._call_chain(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 629, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 410, in open
response = meth(req, response)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 523, in http_response
'http', request, response, code, msg, hdrs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 448, in error
return self._call_chain(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 531, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request
JWs-MacBook-Pro:market cap JW$
правки, показывающая, как я подготовил список итерироваться (довольно стандартный Я но подумал, что это может быть полезно):
symbols = open("symbolslist.txt")
readsymbols = symbols.read()
NewSymbolsList = readsymbols.split("\n")
Пара вопросов: - Какая версия Python вы используете на каждой машине? - Каков фактический URL-адрес, который вы нажимаете на Mac? 400 означает, что Yahoo сообщает вам, что вы делаете что-то неправильно. Попробуйте распечатать его, прежде чем звонить. –
@Mark Version - это Python 2.7 на обеих машинах. Ошибка возникает при первом URL-адресе, поэтому я предполагаю, что это синтаксис? Как я уже сказал, это отлично работает на моем компьютере. Это url: («http://finance.yahoo.com/d/quotes.csv?s=%s&f=%s»), и первым символом в списке является AAAE, я убедился, что особых символов нет в моем списке –
Хммм. Поэтому вызов get_price ('AAAE') и get_market_cap ('AAAE') работает так, как ожидалось, на моем mac с python 2.7. Выполняется ли запрос, если вы вызываете его напрямую? –