2014-07-21 3 views
0

현재 Steam API로 플레이어 세부 정보, 게임 인벤토리 등을 얻으 려하고 있습니다. 매우 비싼 API 요청을 저장하는 방법에 대한 해결책을 찾지 못하면 조금 어려움을 겪고 있습니다.Django 모델로 API 요청을 저장하고 업데이트 하시겠습니까?

나는 이것은 매우 비싼 요청하고, 따라서 나는 위해 데이터베이스에이를 저장해야

http://api.steampowered.com/IEconItems_570/GetSchema/v0001/

를 사용하여 특정 게임 (DOTA2)에 대한 전체 항목 스키마를 얻고있다 특정 사용자 인벤토리와 관련된 항목 세부 정보를 가져올 수 있습니다. 나는 데이터베이스 내의 모든 정보를 저장하려면 어떻게

  1. :

    나는 질문의 번호가? 수동으로 모델을 만든 다음 데이터를 필터링하고 저장해야합니까? 그렇다면 실제로 어떻게 할 것인가? (IE는 models.py에서 모델 레벨에서 이것을 수행 할 것인가 아니면 뷰 내에서이 작업을 수행할까요?)

  2. 다음으로 항목 스키마에 대한 변경 사항을 어떻게 업데이트합니까? 업데이트가있을 때?

  3. 위 Q2의 경우 데이터베이스를 업데이트해야 할 때만 실행할 수있는 스크립트는 어떻게 만듭니 까? 내가 생각할 수있는 한 가지 방법은 방문했을 때 업데이트를 시작하지만 이것이 최선인지 확실하지 않은 URL을 설정하는 것입니다.

고마워요!

답변

0

귀하의 질문은 정말 큽니다. 먼저 모든 정보를 데이터베이스에 저장하려면 settings.py에서 데이터베이스 정보를 설정해야합니다. 모든 값을 데이터베이스로 복원하려면 models.py에 필드를 설정해야합니다. 예를 들어,

... 
name = models.CharField(max_length=20,blank=True,verbose_name='your name') 
... 

둘째, 업데이트가있을 때 요청이 있습니다. 이 요청을 받자 마자 그것을 구문 분석 한 다음 데이터베이스에 저장할 수 있습니다. 이것은 업데이트 요청을받는 곳에서 바로 수행 할 수 있습니다. 셋째, 두 가지 방법이 있다고 생각합니다. 하나는 URL을 사용하여 말한 것입니다. 다른 하나는 update 함수를 직접 호출하는 것입니다. 이것은 파이썬입니다, 그렇죠? 원하는 모든 기능을 호출 할 수 있습니다.

희망이 있습니다.

0

첫 번째 질문에 대한 답변은 이전 데이터를 어떻게 처리 할 것인가에 달려 있습니다. API의 역사적 가치에 관심이 없다면 (예 : 어제와 오늘 사이에 무기에 대한 속성 변경이 있었음) 현재 값 (즉, 현재이 무기의 속성이 무엇인지)에 대해 신경 쓰지 않으면 결과를 간단히 캐시 할 수 있습니다.

이 캐싱은 여러 가지 방법으로 수행 할 수 있지만 가장 간단한 방법은 전체 API 결과를 로컬 데이터베이스에 저장하는 것입니다. 이것은 또한 두 번째 질문을 효과적으로 해결합니다. 어떻게 업데이트합니까? 새 API 스키마를 가져 와서 저장합니다. 스키마의 모든 측면을 파싱하는 것에 대해 걱정할 필요가없고 적절한 부분 만 업데이트합니다. 또한 전체 내용을 저장하기 때문에 예기치 않은 스키마 변경으로부터 보호됩니다.

기록 데이터가 필요하면 응답 구문 분석이 필요합니다. 전체 스키마를 모델링하고 시스템의 값에 날짜를 표시해야합니다.업데이트를 확인할 때마다 시스템에 새 항목을 추가해야합니다. 대다수의 스키마는 업데이트간에 변경되지 않습니다. 변경되지 않은 데이터 (예 : 품질, originnames, item_levels 등)를 처리하지 않으면 대부분의 데이터가 복제된다는 것을 알 수 있으며 대부분의 항목 자체는 지정된 업데이트의 영향을받지 않습니다.

옵션 3에 대한 제안은 유효한 아이디어이지만 다른 사람 (아마도 당신)이 수동으로 방문해야합니다. 아마 구현하는 것이 가장 쉽습니다.