中山大学数据科学与计算机学院本科生实验报告

(2020年秋季学期)

课程名称 IOS现代操作系统应用开发 任课老师 郑贵锋
年级 2018级 专业(方向) 软件工程专业
学号 18342011 姓名 陈远泓
电话 13352918138 Email 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课程期末项目报告相关推荐

  1. 燕山大学课程实践项目报告:ISBN号识别系统的设计与开发

    文章目录 摘要 前言 正文 一.研究内容的基本原理 二.所采用的研究方法及相关工具 三.项目的方案设计 四.核心代码实现 1.读取图片 2.将原图转化为灰度图 3.去噪处理 4.迭代法求阈值 5.水平 ...

  2. c语言期末系统答辩,C语言期末项目答辩实施方案.doc-资源下载人人文库网

    <C语言>期末项目答辩实施方案.doc C语言程序设计课程期末项目答辩考核实施方案1. 考核目的:C语言程序设计是理论与实践并存的一门课程.通过项目答辩的方式考核,旨在考察学生对课程知识掌 ...

  3. 基于机器学习的2022卡塔尔世界杯冠军预测-个人期末项目总结

    声明:文中内容基于山东某高校数据挖掘课程的学习成果,本系列文章为课程期末项目的个人总结. #--------------- [2022年6月补充:非常不好意思大家,当时是笔记用,我没想到这么久还有人看 ...

  4. java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc

    JAVA课程设计_闹钟的设计与实现项目-报告_附源代码 第2章 MACROBUTTON AcceptAllChangesInDoc [双击此处键入1级标题] PAGE 2 - PAGE 1 - .. ...

  5. 软件工程课程设计项目总结与项目报告

    软件工程课程设计团队项目总结与项目报告 团队成员自评 漆艺: 身为团队的PM项目经理,开始的时候自己还不知道该做些什么,因为自己项目经验不足,团队把这个重要的角色交给我,那就有责任和义务把团队项目做好 ...

  6. 《spark技术应用》课程期末考试大作业报告,使用eclipse完成求top值、文件排序、二次排序三个程序的个性化开发。

    ​​​​目录 一.选题的目的及要求... 4 二.设计思路... 4 三.主要内容及关键技术.. 5 四.制作步骤... 5 1.准备工作... 5 1.1在VMware中安装一台Ubuntu64位系 ...

  7. 硕士论文中期汇报ppt_机械加工中心期末项目中期报告

    一学期的时间转眼又所剩无几,是时候给这段时间的努力一个交代了! 在十三周,机械加工中心发布了本学期的期末项目.正所谓,实践才是检验真理的唯一标准,在制作期末项目的过程中,不仅考验对项目原理.结构的了解 ...

  8. Python课程期末考试编程题自动批卷原理与实现模板

    适用场合: 1)Python程序设计课程上机或实验作业自动批阅. 2)Python程序设计课程期末考试编程题的自动评分. 设计思路: 1)编写考试试卷程序文件,定义好每个试题的函数接口和预期功能,详细 ...

  9. 战旗类DotA游戏原代码及项目报告

    C语言程序设计实践的课程设计我们写了个游戏,差点拿满分,先将代码与项目报告与大家分享^_^ 先上截图: 游戏名称:DotA圣战 类型:回合制RPG战棋类游戏 分工: SwordHoly:游戏主程序,英 ...

最新文章

  1. c#程序设定使用期限_C# 给某个方法设定执行超时时间
  2. python 日志不会按照日期分割_python日志切割保留一个月
  3. JZOJ 5050. 【GDOI2017模拟一试4.11】颜色树
  4. 防止Ddos攻击脚本
  5. 【Android 修炼手册】常用技术篇 -- Android 插件化解析
  6. logcat崩溃_使用logcat抓取Android崩溃日志
  7. 简历中能熟练使用计算机怎么写,过了计算机二级,可以在简历里写“熟练掌握Excel”吗?...
  8. 影响个人计算机系统功能的因素,影响个人计算机系统功能的因素除了系统使用哪种位的微处理器外,还有CPU的时钟频率、CPU主内存容量、CPU所能提供的指令集。...
  9. [react] 请说说什么是useReducer?
  10. SpringBoot(十) :邮件服务
  11. java矩阵面积_Java基础 矩阵面积
  12. Mysql中用between...and...查询日期时注意事项
  13. POJ1061 青蛙的约会(扩展欧几里得)题解
  14. Sql中Output参数用法和分页存储过程
  15. 快速找回Edge浏览器书签的方法
  16. 计算机审计实训遇到的问题及解决方法,计算机审计实训总结报告.doc
  17. 编程实现幂函数,(指数为整数)
  18. docker quick start
  19. 移动小工具——利用python进行综合调度班的区县信息处理
  20. [工作效率提升]焦虑性失眠的应对方法

热门文章

  1. qt 打开exe文件
  2. 史记十表-卷十六-秦楚之际月表第四
  3. BI工具是什么,有什么用,怎么用?
  4. uni-app上传图片并添加水印
  5. 关于克苏鲁神话的细节
  6. VMware如何监测性能问题
  7. elementUI上传图片后删除
  8. 北京积分落户纳税入库时间余额已不足
  9. C语言项目 - 有理数类型
  10. 如何优雅地在Word中粘贴代码