IOS课程期末项目报告
中山大学数据科学与计算机学院本科生实验报告
(2020年秋季学期)
课程名称 | IOS现代操作系统应用开发 | 任课老师 | 郑贵锋 |
---|---|---|---|
年级 | 2018级 | 专业(方向) | 软件工程专业 |
学号 | 18342011 | 姓名 | 陈远泓 |
电话 | 13352918138 | 1711960813@qq.com | |
开始日期 | 2020.12 | 完成日期 | 2021.1 |
一、实验题目
- 运用综合知识编写功能比较完善的iOS项目
二、实现内容
个人贡献
- 数据获取- 使用Charles截获喜茶app的https包- 从https包中提取有效信息
- 数据处理- 使用JSNode和Javascript对数据进行提取筛选
三、实验结果
最终数据截图
原始数据截图
- 对原始数据进行处理,得到所需信息(除了商品详情detail)
- 需安装Node.js,并且用npm安装request模块
'use strict';const fs = require('fs');let rawdata = fs.readFileSync('categories.json');
let student = JSON.parse(rawdata);let shit = student.data.categories;let url = "https://go.heytea.com/api/service-portal/vip/grayapi/v4/shop/product-info?shopId=523&productIds="let answer = {};
answer.name = "喜茶菜单";let datas = [];for(var i = 0; i < shit.length; i++)
{let block = {};block.name = shit[i].name;block.image = shit[i].category_image_url;let products = [];for(var j = 0; j < shit[i].products.length; j++){let pres = shit[i].products[j];let urlnow = url + pres.id;var request = require('request');let goods = {};goods.id = pres.id;goods.name = pres.name;let temp = [];if(pres.labels.length != 0){for(var k = 0; k < pres.labels.length; k++){temp.push(pres.labels[k].name);}}goods.tags = temp;goods.description = pres.description;goods.image = pres.images[0].url;let temp3 = [];goods.detail = temp3;goods.价格 = pres.price;products.push(goods);}block.data = products;// console.log(block);datas.push(block);
}
answer.data = datas;
//console.log(answer);let data = JSON.stringify(answer);
fs.writeFileSync('heytea_menu.json', data);
- 对每个商品发出GET请求,获取商品的detail信息
'use strict';const fs = require('fs');
var request = require('request');
let rawdata = fs.readFileSync('heytea_menu.json');
let student = JSON.parse(rawdata);
let urltemp = "";
let get_temp = function(urltemp, i, j){return new Promise(function(resolve, reject){request(urltemp, function (error, response, body) {if (!error && response.statusCode == 200) {// console.log(body) // Show the HTML for the baidu homepage.body = JSON.parse(body);//console.log(body);let temp3 = [];let location = body.data.products[0].skus[0].materials;if(location.length != 0){for(var k = 0; k < location.length; k++){let jihe = {};jihe.name = location[k].group_name;let detaildetail = [];for(var counter = 0; counter < location[k].values.length; counter ++){let detailcounter = {};detailcounter.name = location[k].values[counter].name;if(counter == 0){detailcounter.selected = 0;}else{detailcounter.selected = 1;}detaildetail.push(detailcounter);}jihe.detail = detaildetail;temp3.push(jihe);}}//console.log(i);//console.log(j);student.data[i].data[j].detail = temp3;// console.log(student.data[i].data[j].detail);resolve(temp3);}else{reject(error);}})});
}let url = "https://go.heytea.com/api/service-portal/vip/grayapi/v4/shop/product-info?shopId=523&productIds=";
let all_req = [];for(let i = 0; i < student.data.length; i++)
{for(let j = 0; j < student.data[i].data.length; j++){//console.log(student.data[i].data[j]);urltemp = url + student.data[i].data[j].id;get_temp(urltemp, i, j).then(function(temp3){//console.log(temp3);let data = JSON.stringify(student);fs.writeFileSync('heytea_menu.json', data);}, function(err){console.log(err);});}
}
- 遇到的问题和解决方案
- 一开始不知道从哪里获取所需的数据
解决办法:
- 百度发现可以使用Charles截获手机访问喜茶app时接收的https包
- https包解析失败
解决办法:
- IOS更新到13之后,Iphone安装证书之后不会自动信任证书,需要在设置->通用->关于本机->证书信任设置中信任证书
- 对JSON数据的处理
解决方法:
- 使用Javascript对JSON数据进行处理提取
在Javascript发出GET请求时,会另开一个线程等待回应,主线程将继续执行不会等待响应的到来。在for循环中嵌套GET请求时由于异步不能及时把数据更新
解决方法:
- 使用Promise保证数据能被有效更新
个人总结与个人贡献评分
个人总结
第一次尝试扒数据,不会做,开头全靠百度,在起步找寻截获方法的时候花了好多时间
同时在解析https包时,按照了网上的csdn博客去反反复复尝试依然失败,最终才从一篇简书中发现是iPhone不会默认信任证书,这提醒了我网上的博客有很多已经是过时了的。
在对JSON数据的处理的时候,刚开始一度打算手动编辑数据,后来发现效率非常低下,在别人的帮助下使用了Javascript进行数据处理,达到了事倍功半的效果
由于GET请求的异步再次请求了别人的帮助,学会了使用Promise来等待响应的到来
有很多在线的JSON编辑器,帮助了我更好的理解了数据的层次结构
个人贡献评分
尽我所能做到最棒了
100分
IOS课程期末项目报告相关推荐
- 燕山大学课程实践项目报告:ISBN号识别系统的设计与开发
文章目录 摘要 前言 正文 一.研究内容的基本原理 二.所采用的研究方法及相关工具 三.项目的方案设计 四.核心代码实现 1.读取图片 2.将原图转化为灰度图 3.去噪处理 4.迭代法求阈值 5.水平 ...
- c语言期末系统答辩,C语言期末项目答辩实施方案.doc-资源下载人人文库网
<C语言>期末项目答辩实施方案.doc C语言程序设计课程期末项目答辩考核实施方案1. 考核目的:C语言程序设计是理论与实践并存的一门课程.通过项目答辩的方式考核,旨在考察学生对课程知识掌 ...
- 基于机器学习的2022卡塔尔世界杯冠军预测-个人期末项目总结
声明:文中内容基于山东某高校数据挖掘课程的学习成果,本系列文章为课程期末项目的个人总结. #--------------- [2022年6月补充:非常不好意思大家,当时是笔记用,我没想到这么久还有人看 ...
- java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc
JAVA课程设计_闹钟的设计与实现项目-报告_附源代码 第2章 MACROBUTTON AcceptAllChangesInDoc [双击此处键入1级标题] PAGE 2 - PAGE 1 - .. ...
- 软件工程课程设计项目总结与项目报告
软件工程课程设计团队项目总结与项目报告 团队成员自评 漆艺: 身为团队的PM项目经理,开始的时候自己还不知道该做些什么,因为自己项目经验不足,团队把这个重要的角色交给我,那就有责任和义务把团队项目做好 ...
- 《spark技术应用》课程期末考试大作业报告,使用eclipse完成求top值、文件排序、二次排序三个程序的个性化开发。
目录 一.选题的目的及要求... 4 二.设计思路... 4 三.主要内容及关键技术.. 5 四.制作步骤... 5 1.准备工作... 5 1.1在VMware中安装一台Ubuntu64位系 ...
- 硕士论文中期汇报ppt_机械加工中心期末项目中期报告
一学期的时间转眼又所剩无几,是时候给这段时间的努力一个交代了! 在十三周,机械加工中心发布了本学期的期末项目.正所谓,实践才是检验真理的唯一标准,在制作期末项目的过程中,不仅考验对项目原理.结构的了解 ...
- Python课程期末考试编程题自动批卷原理与实现模板
适用场合: 1)Python程序设计课程上机或实验作业自动批阅. 2)Python程序设计课程期末考试编程题的自动评分. 设计思路: 1)编写考试试卷程序文件,定义好每个试题的函数接口和预期功能,详细 ...
- 战旗类DotA游戏原代码及项目报告
C语言程序设计实践的课程设计我们写了个游戏,差点拿满分,先将代码与项目报告与大家分享^_^ 先上截图: 游戏名称:DotA圣战 类型:回合制RPG战棋类游戏 分工: SwordHoly:游戏主程序,英 ...
最新文章
- c#程序设定使用期限_C# 给某个方法设定执行超时时间
- python 日志不会按照日期分割_python日志切割保留一个月
- JZOJ 5050. 【GDOI2017模拟一试4.11】颜色树
- 防止Ddos攻击脚本
- 【Android 修炼手册】常用技术篇 -- Android 插件化解析
- logcat崩溃_使用logcat抓取Android崩溃日志
- 简历中能熟练使用计算机怎么写,过了计算机二级,可以在简历里写“熟练掌握Excel”吗?...
- 影响个人计算机系统功能的因素,影响个人计算机系统功能的因素除了系统使用哪种位的微处理器外,还有CPU的时钟频率、CPU主内存容量、CPU所能提供的指令集。...
- [react] 请说说什么是useReducer?
- SpringBoot(十) :邮件服务
- java矩阵面积_Java基础 矩阵面积
- Mysql中用between...and...查询日期时注意事项
- POJ1061 青蛙的约会(扩展欧几里得)题解
- Sql中Output参数用法和分页存储过程
- 快速找回Edge浏览器书签的方法
- 计算机审计实训遇到的问题及解决方法,计算机审计实训总结报告.doc
- 编程实现幂函数,(指数为整数)
- docker quick start
- 移动小工具——利用python进行综合调度班的区县信息处理
- [工作效率提升]焦虑性失眠的应对方法