前一篇我們把資料庫修改完成了
今天我們就要來把BeautifulSoup的中文資料送過去了
由於昨天遭遇了一些困難,今天終於排除成功啦
廢話不多說,咱們累狗~
好的,上一篇處理完之後,這一篇接下來就是把url跟views做修改啦
畢竟views的API改了,url當然也要跟著改
所以我們先把views.py的檔案改成如下
from django.shortcuts import render
from django.http import JsonResponse #剛剛的JsonResponse套件
from stonks_index.models import stonks_DB #從models.py import DBTest 物件
from django.views.decorators.csrf import csrf_exempt
import json
# Create your views here.
@csrf_exempt
def set_stonks_data(request):
#取得post data
data = request.POST
#檢查所有欄位是否都有值,若有欄位沒有值,回傳400
if 'comp_id' not in data:
return JsonResponse({"status": False, "message": "comp_id column cannot be empty"}, status=400)
if 'year' not in data:
return JsonResponse({"status": False, "message": "year column cannot be empty"}, status=400)
if 'season' not in data:
return JsonResponse({"status": False, "message": "season column cannot be empty"}, status=400)
if 'balance_sheet' not in data:
return JsonResponse({"status": False, "message": "balance_sheet column cannot be empty"}, status=400)
if 'income_statement' not in data:
return JsonResponse({"status": False, "message": "income_statement column cannot be empty"}, status=400)
#建立新的DBTest object
new_obj = stonks_DB()
#一個蘿蔔一個坑
new_obj.comp_id = data.get('comp_id', None)
new_obj.year = data.get('year', None)
new_obj.season = data.get('season', None)
new_obj.balance_sheet = data.get('balance_sheet', None)
new_obj.income_statement = data.get('income_statement', None)
#儲存object
new_obj.save()
#回傳200,這裡使用JsonResponse
return JsonResponse(data={'msg':'add object success.'}, status=200)
@csrf_exempt
def get_stonks_data(request):
data = request.POST
#檢查每欄位是否有值,若有一欄位沒有值,回傳400
if 'comp_id' not in data:
return JsonResponse({"status": False, "message": "comp_id column cannot be empty"}, status=400)
if 'year' not in data:
return JsonResponse({"status": False, "message": "year column cannot be empty"}, status=400)
if 'season' not in data:
return JsonResponse({"status": False, "message": "season column cannot be empty"}, status=400)
#將每個request之欄位撈出
post_comp_id = data.get('comp_id', None)
post_year = data.get('year', None)
post_season = data.get('season', None)
#搜尋符合條件之object
filter_obj = stonks_DB.objects.filter(comp_id = post_comp_id, year = post_year, season = post_season)
#如無符合條件之data,回傳400
if filter_obj.count() == 0:
return JsonResponse({"status": False, "message": "cannot find package"}, status=400)
#取出第一筆資料
filter_obj = filter_obj.first()
#將撈出之data變成dict, 記得內容要轉成json
return_dict = {'balance_sheet':json.loads(filter_obj.balance_sheet), 'income_statement':json.loads(filter_obj.income_statement)}
#回傳200,這裡使用JsonResponse, 把dict之資料變成JSON
return JsonResponse(data=return_dict, status=200)
通常在設計API時,我們會用get關鍵字代表資料撈出,set代表資料存入
因此這裡我們用get跟set代表財報資料的存入撈出
然後url.py記得也要順便改
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'set_stonks_data/$', views.set_stonks_data),
url(r'get_stonks_data/$', views.get_stonks_data),
]
處理完之後試跑一下runserver看有沒有問題
改完了server端,接下來就要改好久不見的beautifulsoup端了
還記得我們當時使用了request撈取財報資料嗎
現在我們要來用request把資料送到伺服器裡面了
首先我們將之前檔案最後這一段改成如下
url = "http://172.16.15.123:8000/stonks/set_stonks_data/"
data={'comp_id':1201,
'year':109,
'season':1,
'balance_sheet':json.dumps(balance_sheet),
'income_statement':json.dumps(income_statement)}
res_post = requests.post(url=url,data=data,headers=headers)
print(res_post)
改完之後執行bs4的py檔
回傳200,成功
接下來我們去看看資料庫
成功收到資料
接下來就是把資料回傳回來啦
這邊我們就可以使用postman了
我們把postman的url改成http://172.16.15.123:8000/stonks/get_stonks_data/
然後欄位改成如下
最後按一下送出
成功撈出資料啦~
以上我們成功的把財報資料撈出來並且儲存在Database內了
下一步我們就要來把所有歷屆財報自動撈取啦
想知道這麼多財報撈起來要多久
咱們下回分解~