main.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from enum import Enum
  2. import time
  3. from datetime import datetime
  4. from typing import Optional
  5. from pydantic import BaseModel
  6. from fastapi import FastAPI, Query, UploadFile, File
  7. from fastapi import FastAPI
  8. from fastapi.middleware.cors import CORSMiddleware
  9. import json
  10. import urllib.request
  11. import dataset,json
  12. url = 'https://api.coinmarketcap.com/data-api/v3/nft/collections?start=0&limit=5'
  13. app = FastAPI()
  14. origins = [
  15. "http://172.105.205.52",
  16. "http://172.105.205.52:8001",
  17. ]
  18. app.add_middleware(
  19. CORSMiddleware,
  20. # allow_origins=origins,
  21. allow_origins=["*"],
  22. allow_credentials=True,
  23. allow_methods=["*"],
  24. allow_headers=["*"],
  25. )
  26. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/NFTBoard?charset=utf8mb4')
  27. class subreq(BaseModel):
  28. email:str
  29. @app.get("/showdata")
  30. async def showdata():
  31. r = urllib.request.urlopen(url)
  32. collections = json.loads(r.read())['data']['collections']
  33. reqs = []
  34. for req in collections:
  35. logo = 'https://s3.coinmarketcap.com/generated/nft/collections/' + req['slug'] + '.png';
  36. last_7_days = 'https://s3.coinmarketcap.com/generated/sparklines/nft/collection/web/30d/' + req['slug'] +'.png';
  37. 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})
  38. return reqs
  39. @app.post("/add_sub")
  40. async def add_subclient_info(req:subreq):
  41. code = 'ok'
  42. sub_table = db['Subscribe']
  43. time_stamp = datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d %H:%M:%S")
  44. pk = sub_table.insert({'email':req.email,'timestamp':time_stamp})
  45. return {'msg':code}
  46. @app.get("/get_sub_list")
  47. async def add_subclient_info():
  48. statement = 'SELECT * FROM Subscribe'
  49. result = []
  50. for row in db.query(statement):
  51. result += [{'id':row['id'],'email':row['email'],'timeStamp':row['timestamp']}]
  52. return result