나는 장고를 배우려고 노력 중이며 각각에 대해 몇 가지 일반적인 정보가있는 회사 목록이 들어있는 작은 앱을 만들었습니다. 홈 페이지에는 모든 회사의 목록이 표시되며 사용자는 회사 이름을 클릭하여 자세한 정보를 볼 수 있습니다. 이제는 Yahoo Finance에서 회사에 대한 주식 데이터를 얻고 페이지에 표시하는 방법으로 Django에서 API를 사용하는 방법을 파악하려고합니다. (필자는 파이썬에서 yahoo-finance 패키지를 여러 번 사용해 왔으며, 꽤 똑바로 전진했습니다. 그래서 나는 이것을 보았습니다.) 데이터를 데이터베이스에 저장할 필요가 없습니다 (유일한 방법이 아니면). 간단히 표시하고 싶습니다.Django에서 Yahoo Finance API를 사용하는 방법
나는 pip를 설치하고 settings.py 파일의 APPS에 추가했습니다.
그런 다음 내 views.py에서 yahoo-finance 종속성을 추가하고 아래 코드의 API에서 작업하려고했습니다. 그런 다음 템플릿에서 {{mkt_cap}}을 사용하려고합니다. 이 방법을 사용하면 YQLResponseMalformedError가 발생합니다. 이것이 올바른 방법이 아닐 수도 있다는 것을 깨닫고 있지만, 알아 내기가 힘듭니다.
from django.views import generic
from .models import Company, Articles, Transcripts, TranscriptDetails
from yahoo_finance import Share
import json
class CompanyDetails(generic.DetailView):
model = Company
template_name = 'company_details.html'
def get_context_data(self, **kwargs):
pk = self.kwargs.get('pk')
context = super(CompanyDetails, self).get_context_data(**kwargs)
context['articles'] = Articles.objects.filter(company_id=pk).order_by('-date')
context['company'] = Company.objects.get(id=pk)
context['transcripts'] = Transcripts.objects.filter(company_id=pk).order_by('-date')
# Get Yahoo API data
stock_symbol = Company.objects.filter(id=pk).values_list('stock_symbol', flat=True)
data = Share(stock_symbol)
data = json.load(data)
context['mkt_cap'] = data
return context
편집
여기 경우 다른 사람의 마지막 코드가 비슷한 질문을 가지고 있습니다. 보기에서 모든 API 호출을 유지하고 사전을 만들어 템플릿에 전달했습니다.
class CompanyDetails(generic.DetailView):
model = Company
template_name = 'company_details.html'
def get_context_data(self, **kwargs):
pk = self.kwargs.get('pk')
context = super(CompanyDetails, self).get_context_data(**kwargs)
context['articles'] = Articles.objects.filter(company_id=pk).order_by('-date')
context['transcripts'] = Transcripts.objects.filter(company_id=pk).order_by('-date')
# Get Yahoo API data
stock_symbol = self.object.stock_symbol
data = Share(stock_symbol)
stock_open = data.get_open()
year_range = data.get_year_range()
fifty_day_moving_average = data.get_50day_moving_avg()
market_cap = data.get_market_cap()
yahoo_finance = dict()
yahoo_finance['stock_open'] = stock_open
yahoo_finance['year_range'] = year_range
yahoo_finance['fifty_day_moving_average'] = fifty_day_moving_average
yahoo_finance['market_cap'] = market_cap
context['yahoo_finance'] = yahoo_finance
return context
그런 다음 템플릿에서 다음이 I 유사한 사용에 액세스하려면 :
{{ yahoo_finance.stock_open }}
{{ yahoo_finance.year_range }}
{{ yahoo_finance.fifty_day_moving_average }}
{{ yahoo_finance.market_cap }}
Perfect, 내가 찾고있는 곳입니다. 데이터 객체를 전달한 다음 템플릿에서 API를 호출하면 내가 할 수 있다는 것을 알지 못해 추가 보너스가되었습니다. 보기에서 API 요청을 유지하는 것을 선호하지만 추가 요청을 추가하기 위해 사전을 만들었습니다. – pheeper