成品小说网站源码仿笔趣阁+手机版APP带全自动采集功能

2年前 (2022) 程序员胖胖胖虎阿
826 0 0

  可组合性是重用系统组件来开发应用程序的一般能力。例如,乐高积木是许多可以创建的不同结构的构建块。在web3世界中,基于文本的 NFT 只是类似于乐高积木的单词列表,允许社区围绕这些可组合部分构建全自动采集小说网站源码。
  
  源码:xsymz.icu
  
  这篇文章将介绍我如何构建DevDaoStory,这是一部基于DevDaoNFT的动态视觉小说站源码。我将重点介绍我是如何构建以下部分的:

成品小说网站源码仿笔趣阁+手机版APP带全自动采集功能
  
  ●前端使用服务器端渲染
  
  ●使用 OpenSea API 进行身份验证
  
  ●使用 Ren'py 引擎生成独特的游戏
  
  前端
  
  用户界面是一个使用 HTML、Bootstrap、JavaScript、jinja2和JQuery构建的网站。我发现使用原语构建最简单,而不是被锁定在像 React 这样的框架中以获得简单的接口。
  
  DevDaoStory 主页
  
  由于我使用 jinja2 进行服务器端渲染,因此该应用程序托管在AWS Lambda和API Gateway上,每个月提供一百万个免费使用的事件,这为托管应用程序提供了一种经济高效的方式。
  
  这个应用只有两个页面,主页和选择你的开发页面。这是用于在用户钱包中呈现 Devs 的代码片段。

  {% for dev in devs %}
  <div class="col-md-5 offset-md-1">
  <div class="card mb-3" style="max-width: 540px;">
  <h3 class="card-title mt-3 mx-auto dark-text">Dev #{{dev['id']}}</h3>
  <div class="row g-0">
  <div class="col-md-5">
  <div class="card-body">
  <ul class="list-group list-group-flush">
  <li class="list-group-item">Os: {{dev['os']}}</li>
  <li class="list-group-item">Text Editor: {{dev['textEditor']}}</li>
  <li class="list-group-item">Language: {{dev['language']}}</li>
  <li class="list-group-item">Vibe: {{dev['vibe']}}</li>
  <li class="list-group-item">Location: {{dev['location']}}</li>
  <li class="list-group-item">Mind: {{dev['mind']}}</li>
  <li class="list-group-item">Industry: {{dev['industry']}}</li>
  <li class="list-group-item">Clothing: {{dev['clothing']}}</li>
  <li class="list-group-item">Background: {{dev['background']}}</li>
  </ul>
  </div>
  </div>

  身份
  
  为了了解 Devs,用户已经连接到后台系统,我利用ethers.js库为用户提供了一种使用 MetaMask签署“登录”消息的方法。

  async function connectWallet() {
  if (window.ethereum) {
  try {
  const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });
  console.log("accounts")
  console.log(accounts)
  walletProvider = new ethers.providers.Web3Provider(window.ethereum)
  walletSigner = walletProvider.getSigner();
  const base_message = "Login to DevDaoStory"
  const signature = await walletSigner.signMessage(base_message)
  console.log(signature)
  login_info = {}
  login_info["address"] = accounts[0]
  login_info["signature"] = signature
  login_info["message"] = base_message
  var login_info_string = JSON.stringify(login_info)

  此代码为用户提供了一种允许应用程序读取其公钥的方法,因此可以验证他们的开发人员。
  
  登录 DevDaoStory

成品小说网站源码仿笔趣阁+手机版APP带全自动采集功能
  
  一旦用户接受一个 POST 请求,就会发送到服务器以收集用户的详细信息

  $.ajax({
  type: "POST",
  url: "/web3_login",
  dataType: "json",
  data: login_info_string,
  contentType: "application/json",
  success: function(data) {
  console.log("login finished")
  console.log(data)
  ...
  },
  error: function(xhr, textStatus, thrownError, data) {
  alert("Error: " + thrownError);
  $("body").css("opacity", "1");
  $("#load_spinner").toggle();
  }
  })
  可以利用web3 python 模块验证该消息。
  from web3 import Web3
  from eth_account.messages import encode_defunct
  def verify_signature(address, signature, message, w3):
  """
  Purpose:
  Verify user signed the message
  Args:
  address - address of user
  signature - the signature from user
  message - message to check
  Returns:
  boolean - True if verify, false if not
  """
  encoded_message = encode_defunct(text=message)
  pub_key = w3.eth.account.recover_message(encoded_message, signature=signature)
  logging.info(pub_key)
  # make sure same case
  if w3.toChecksumAddress(pub_key.lower()) == w3.toChecksumAddress(address.lower()):
  return True
  else:
  return False
  ...
  @application.route("/web3_login", methods=["POST"])
  def web3_login():
  """
  Purpose:
  login
  Args:
  N/A
  Returns:
  login object
  """
  jsonResp = {}
  data = request.data
  try:
  login_info = json.loads(data.decode("utf-8"))
  logging.info(login_info)
  address = w3.toChecksumAddress(str(login_info["address"]).lower())
  message = str(login_info["message"])
  signature = str(login_info["signature"])
  valid = web3_utils.verify_signature(address, signature, message, w3)

  有关设置 python web3 环境的更多信息,请查看文档
  
  开放API
  
  验证消息后,我们现在可以使用OpenSea API为用户获取 Devs。

  def get_opensea_assets(userAddress: str, contract: str):
  """
  Purpose:
  Get assets from opensea
  Args:s
  userAddress: user to get
  contract: contract to get
  Returns:
  json_obj - Opensea assets
  """
  API_KEY = os.environ["OPENSEA_API"]
  HEADERS = {"x-api-key": API_KEY, "Accept": "application/json"}
  url = "https://api.opensea.io/api/v1/assets"
  querystring = {
  "owner": userAddress,
  "order_direction": "desc",
  "offset": "0",
  "limit": "20",
  "asset_contract_address": contract,
  }
  json_obj = requests.get(url, params=querystring, headers=HEADERS).json()
  return json_obj["assets"]
  assets = web3_utils.get_opensea_assets(address, DEVS_CONTRACT)

  API 调用将获取有关该项目的所有信息,包括tokenid. 通过在pixel-avatars 项目的基础上构建,我们现在可以获取图像以及定义您的 Dev 的数据,因此可以在前端进行渲染。
  
  结论
  
  DevDaoStory构建带手机版APP小说网站源码很有趣,以确保其他开发者可以从开源源码中易于二开。

相关文章

暂无评论

暂无评论...