一个小程序也能获得 50W 天使投资!图书社交小程序的核心步骤及源码分享 (下)

简介: 接上文

获取书房列表


和身份有关的数据都会通过token的校验获取openid来进行


else if(action=="listmy"){
    dbRes = await db.collection('bookshelfs').where({
            owner:dbCmd.eq(payload.openid)
    })
    .orderBy("_id","desc")
    .limit(10)
    .get()
}


寻找距离我最近的书房


else if(action=="listbygeo"){
        dbRes = await db.collection('bookshelfs').field({owner:false}).where({
                geopoint:dbCmd.geoNear({
                        geometry: new db.Geo.Point(event.longitude, event.latitude),
                        maxDistance: 3000,//单位米
                        minDistance: 0
                })
        })
        .limit(100)//做个数量限制
        .get()
}


修改书房


else if(action=="update"){
    const res = await msgSecCheck(payload.openid,event.name);
    if(res.result.suggest!="pass"){
            return {err:1,msg:"内容不安全"};
    }
    dbRes = await db.collection("bookshelfs").where({
            "_id":dbCmd.eq(event._id),
            "owner":dbCmd.eq(payload.openid)
    }).limit(1).update({
            name:event.name,
            address:event.address,
            geopoint:new db.Geo.Point(event.longitude, event.latitude)
    })
    return dbRes;
}


删除书房


else if(action=="delete"){
        dbRes = await db.collection("bookshelfs").where({
                "_id":dbCmd.eq(event._id),
                "owner":dbCmd.eq(payload.openid)
        }).remove();
}


图书数据库


通过ISBN爬取豆瓣图书信息


首先通过scanCodeapi来扫描图书背后的条码,获取到条码信息后通过云函数向某瓣爬取图书标题和封面


let { isbn } = event;
let res = await uniCloud.httpclient.request("https://search.douban.com/book/subject_search?search_text="+isbn+"&cat=1001");
let reg = /window\.__DATA__ = "(.*)"/;
if(reg.test(res.data)){
      let bookdata=RegExp.$1;//这是数据是被加密的,需要解密
}


爬取到的信息需要解密,本文就不讲述解密过程了,小伙伴们可以自行看源码。


这个爬虫违法吗?我认为不违法,因为封面,标题信息属于公开信息,不从某瓣爬,我们也可以从别的地方获取,比如图书电商,比如付费API等。另外我们并没有收集某瓣对于图书的评分,评论等这些某瓣独有的数据。


不过有其他意见的小伙伴可以在评论区帮我普普法


建立自己的ISBN库


  • 封面图上传至云存储


let coverImage = await uniCloud.httpclient.request(data.cover_url);
let uploadResult = await uniCloud.uploadFile({
    cloudPath:isbn+".jpg",
            fileContent:coverImage.data
})


  • 自己的ISBN数据库


let resData = {
        isbn:isbn,
        title:data.title,//图书标题
        cover_url:uploadResult.fileID,//封面在云存储的url地址
        abstract:data.abstract//图书附加信息
}
dbResult = await db.collection("isbnlib").add(resData);


那么有了自己的ISBN数据库,下次再有用户扫描相同的图书时,信息就不用再去爬取了,直接从自己的ISBN数据库返回,这也是一种利用众包的机制来建立数据库的方法


let dbResult = await db.collection("isbnlib").limit(1).where({
              isbn:isbn
}).get();
//数据库里已有相同ISBN的话,则直接返回数据库里的信息
if(dbResult.affectedDocs>0){
      return dbResult.data[0];
}


书架图书数据库


放到书架上的图书,我们新建一个books的表来管理,并绑定书架idisbn


  • 从ISBN库获取图书信息


const bookInfo = await db.collection("isbnlib").doc(event.isbnid).get();


  • 建立图书数据


绑定书架id,isbnid,openid等,确定图书是谁的,在哪个书架里。


dbRes = await db.collection("books").add({
        owner:payload.openid,
        shelfid:event.shelfid,
        title:bookInfo.data[0].title,
        cover_url:bookInfo.data[0].cover_url,
        isbn:bookInfo.data[0].isbn,
        isbnid:event.isbnid,
        createtime:now,
        updatetime:now,
});


  • 书架里图书总数字段更新


await db.collection("bookshelfs").where({
        owner:payload.openid,
        _id:event.shelfid,
}).update({
        totalbook:dbCmd.inc(1)//inc就是在当前字段的数值基础上增加
})
return dbRes;


  • 图书的搜索


dbRes = await db.collection('isbnlib')
                .where({
                    title=new RegExp(event.keyword, 'i')
                })
    .orderBy("_id","desc")
    .orderBy("updatetime","desc")
    .limit(12)
    .get();


生成书架海报


image.png


利用canvas生成海报,canvas里的绘制细节大家看项目源码吧。这里我主要使用小程序码接口来获取带有参数的小程序码。


image.png


生成小程序码的API一共有三种,其中接口A和接口C是数量有限的,最多只能生成10w个。万一这个小程序用户量大了,书房书架数量超过10w个,那就不能用接口A了。所以我们要使用接口B,数量无限。


  • 云函数调用wxacode接口


const access_token = await getAccessToken();
const res = await uniCloud.httpclient.request("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token,{
        method:"POST",
        headers:{
                "Content-Type":"application/json"
        },
        data:{
                scene:"微信扫码后小程序里可以获取到的信息",
                page:"扫码后进入的小程序页面"
        }
});


但这个接口B的局限是scene字段最长32个字符,参数名只能叫scene。并且该接口只能用于已发布的小程序。


结语


这是我2017年共享图书项目的核心技术部分,用uniCloud重新实现,本文像记流水账一般把核心过程给分享了出来,阅读体验可能不佳,不过分享不易,还请大家多多点赞支持。


相关文章
|
9月前
|
缓存 小程序 前端开发
商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战
本文系统讲解如何利用现有源码快速开发商城、点餐、家政类微信/抖音小程序,涵盖环境搭建、核心功能实现、多平台部署与优化,提供完整技术方案。实战导向,助力开发者高效入门与落地。
|
9月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
9月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
消息中间件 缓存 小程序
婚恋交友相亲公众号app小程序系统源码「脱单神器」婚恋平台全套代码 - 支持快速二次开发
这是一套基于SpringBoot + Vue3开发的婚恋交友系统,支持微信公众号、Uniapp小程序和APP端。系统包含实名认证、智能匹配、视频相亲、会员体系等功能,适用于婚恋社交平台和相亲交友应用。后端采用SpringBoot 3.x与MyBatis-Plus,前端使用Vue3与Uniapp,支持快速部署和二次开发。适合技术团队或有经验的个人创业者使用。
883 8
|
11月前
|
小程序 Java 关系型数据库
圈子系统公众号app小程序系统源码圈子系统带即时通讯 多级圈子系统源码 兴趣小组系统开源 私密圈子系统代码 会员制社区系统
本圈子系统解决方案提供即时通讯、多级圈子、兴趣小组、私密社区及会员制管理功能。支持开源与商业方案,推荐ThinkSNS+、EasyClub及OpenFire等系统,并提供前后端技术选型建议,助力快速搭建社交平台。
621 0
|
存储 移动开发 小程序
校园圈子系统小程序(圈子论坛、私信聊天、资料共享、二手交易、兼职,跑腿)开源码开发/微信公众号、小程序、H5多端账号同步/搭建多城市的综合社交生活平台
基于开源技术栈构建的校园圈子系统小程序,整合社交与生活服务功能,涵盖兴趣圈子、私信聊天、资料共享、二手交易、兼职跑腿等六大核心模块。通过多端账号同步(微信公众号/小程序/H5),实现数据实时交互,满足学生群体的多元化需求。项目精准锚定校园市场,以“社交+服务”双轮驱动,提供一站式解决方案,支持快速部署与多校区运营,同时具备广告、佣金、会员等多元变现能力,是打造校园生态的理想工具。
1531 3
校园圈子系统小程序(圈子论坛、私信聊天、资料共享、二手交易、兼职,跑腿)开源码开发/微信公众号、小程序、H5多端账号同步/搭建多城市的综合社交生活平台
|
小程序 Java 关系型数据库
weixin030英语学习交流平台小程序+ssm(文档+源码)_kaic
本文介绍了英语学习交流平台小程序的开发全过程,包括系统分析、设计与实现。该小程序基于Java的SSM框架进行后端管理开发,使用MySQL作为数据库,并借助微信开发者工具确保系统稳定性。小程序设有管理员和用户两个角色,功能涵盖个人中心、每日打卡、学习计划、论坛交流等,具有操作简单、界面清晰、功能齐全的特点。通过技术可行性、经济可行性和操作可行性分析,证明了系统的实用性和高效性,为英语学习者提供了一个便捷的交流平台。
|
小程序 Java 关系型数据库
weixin116大学生就业平台微信小程序+ssm(文档+源码)_kaic
本文介绍了一款大学生就业平台微信小程序的开发过程,涵盖开发环境、系统设计、实现与测试等方面。该小程序基于微信平台特性,采用MYSQL数据库存储数据,确保系统稳定与安全,同时满足学生、企业和管理员不同权限用户的功能需求。通过简化操作流程,实现了招聘信息查看、简历投递等实用功能,旨在为用户提供便捷高效的求职体验,符合“操作简单,功能实用”的设计理念。
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。