12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- from enum import Enum
- import time
- from datetime import datetime
- from typing import Optional
- from pydantic import BaseModel
- from fastapi import FastAPI, Query, UploadFile, File
- from fastapi import FastAPI
- from fastapi.middleware.cors import CORSMiddleware
- import json
- import urllib.request
- import dataset,json
- import pandas as pd
- from gspread_pandas import Spread, Client
- from oauth2client.service_account import ServiceAccountCredentials
- import gspread
- from first import first
- app = FastAPI()
- origins = [
- "http://172.105.205.52",
- "http://172.105.205.52:8001",
- ]
- app.add_middleware(
- CORSMiddleware,
- # allow_origins=origins,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
- )
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/NFTBoard?charset=utf8mb4')
- class subreq(BaseModel):
- email:str
- @app.get("/showdata/{limit}")
- async def showdata(limit):
- url = 'https://api.coinmarketcap.com/data-api/v3/nft/collections?start=0&limit=' + limit
- r = urllib.request.urlopen(url)
- collections = json.loads(r.read())['data']['collections']
-
- reqs = []
- for req in collections:
- logo = 'https://s3.coinmarketcap.com/generated/nft/collections/' + req['slug'] + '.png';
- last_7_days = 'https://s3.coinmarketcap.com/generated/sparklines/nft/collection/web/30d/' + req['slug'] +'.png';
- reqs.append({'rank':req['rank'],'slug':req['slug'],'logo':logo,'website':req['website'],'name':req['name'],'assets':req['transferUniqueAssetsAT'],'collection_net_worth':req['netWorth'],'volume_7d':req['volume7d'],'sales_7d':req['sales7d'],'volume_all_time':req['volumeAT'],'sales_all_time':req['salesAT'],'last_7_days':last_7_days})
- return reqs
- @app.post("/add_sub")
- async def add_subclient_info(req:subreq):
- code = 1
- sub_table = db['Subscribe']
- time_stamp = datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d %H:%M:%S")
- statement='SELECT COUNT(1) FROM Subscribe WHERE email = "'+req.email+'"'
- if first(db.query(statement))['COUNT(1)']==0:
- pk = sub_table.insert({'email':req.email,'timestamp':time_stamp})
- make_ci_df()
- code = 0
- return {'msg':code}#0 means succss added, 1 means email is duplicated
- @app.get("/get_sub_list")
- async def add_subclient_info():
- statement = 'SELECT * FROM Subscribe'
- result = []
- for row in db.query(statement):
- result += [{'id':row['id'],'email':row['email'],'timeStamp':row['timestamp']}]
- return result
- def make_ci_df():
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/NFTBoard?charset=utf8mb4')
- statement = 'SELECT * FROM Subscribe ORDER BY timestamp DESC'
- #2021-05-23 15:57:43
- df = pd.DataFrame()
- for row in db.query(statement):
- date_format = "%Y-%M-%d %H:%M:%S"
- fdate = row['timestamp'].strftime('%Y-%m-%d %H時 %M分')
- df = df.append({'serial id':row['id'],'e-mail':row['email'],'登記時間':fdate}, ignore_index=True)
- df = df[['serial id','e-mail','登記時間']]
- save_sheet(df,'subscribe_rec','Sheet1')
- def save_sheet(df,filename,tabname,startpos='A1'):
- scope = ['https://spreadsheets.google.com/feeds',
- 'https://www.googleapis.com/auth/drive']
- credentials = ServiceAccountCredentials.from_json_keyfile_name('spread2.json', scope)
- gc = gspread.authorize(credentials)
- spread = Spread(filename,creds=credentials)
- spread.df_to_sheet(df, sheet=tabname, start=startpos, replace=True)
|