Skip to content

xmy88/AppWishList

 
 

Repository files navigation

AppWishList

  —— 基于Pythonista的苹果AppStore愿望单系统。

  GitHub项目地址

前言

  也许是为了促使用户立马买下中意的App,AppStore从iOS 11取消了愿望单系统,从此没有了类似Steam那样的应用关注和收藏功能。很多时候喜欢的应用打折也不能及时得知,或者是看到有意思的App过段时间想用时又想不起名字找不到了。

  不知道你在生活中有没有遇到过这种情况,反正我是有切身体会。在网上找了半天也没发现合适的AppStore愿望单应用,所以就决定自己写一款AppWishList

功能介绍

  本程序可以实现AppStore应用的收藏,并对收藏的应用进行管理和查看价格曲线。收藏的应用被分为两大类,收藏夹愿望单,使用快捷指令的自动化脚本可以每天自动采集应用的最新价格。当愿望单中的应用降价时,还会通过提醒事项向用户发起通知。

主界面

愿望单页面

  在这个界面中展示你重点关注的应用,当他们降价的时候会有消息提醒。你可以对他们进行排序,方便用户优先看到最想要的应用。

分类页面

  点开收藏夹选项会看到这个分类页面,其分类默认是根据苹果商店对应用的分类来进行的,之后可以在详情页面自定义分类。用户也可在此直接删除一整个分类的App。

应用列表

  每个分类选项点开展示该类下应用的基本信息,一般有降价的话右边的按钮会有类似Steam折扣标签那样的展示。比如下面这张数据测试图:


  右上方的按钮可以根据“收藏时间”、“价格”、“名称”三个关键字进行排序。


详情页面

  无论是在分类应用列表还是愿望单,点击选中每一个应用项都可以进入到详情页面,这个页面主要展示的是单个应用的价格变化曲线。

  柱状图按年份进行展示一年的信息,这个数据来自于该应用被收藏以来程序运行所采集到的价格信息,都存储在本地sqlite数据库,所以还是需要用户经常运行程序抓取数据才能及时获取降价信息。不过好在有自动化抓取的脚本,在下面会有使用说明。

  下方横坐标只显示每月1号或15号的日期,当你按住柱状图中的每一条数据上时,具体的时间和价格会显示在正上方,红色代表涨价,绿色代表降价,蓝色则价钱不变。这个柱状图之前考虑过使用matplotlib来绘制,不过后来效果不理想,还是自己手动封装了一个类来实现,每一个bar都是自己手动计算偏移量绘制上去的。ԅ(¯﹃¯ԅ)


  点击分类名称可以修改分类,但分类名称长度限制在1到20之间。

  点击自动更新按钮,可以将该应用添加或移除自动更新列表。在主页面点击数据更新或使用自动化脚本进行批量更新的时候,只有开启了自动更新设置的应用才会被更新。对于那些免费下载或者已经购买的应用可已关闭自动更新以节省更新时间。


  说到这里,应用基本的功能就介绍完了,但其实有个问题还是没法解决。就是很多软件是免费下载,订阅付费或者内购解锁完整功能,但是在官网的主页上只能获取到价格为免费的信息。

环境要求

  • iPad : 由于我只考虑在iPad上使用,目前只做了大屏的UI适配。
  • iOS 13 : 尽量用最新的吧,能向下兼容到什么版本主要还是看下面这位老哥。╮(╯▽╰)╭
  • Pythonista : 这个是必备的,不然你怎么在iPad上运行python为所欲为,至于价钱嘛,68¥简直是赚暴了。
  • 快捷方式、提醒事项 : 苹果自家的产品,零成本,用来实现一些降价通知、自动化的辅助功能。
  • AppStore : 数据源。

安装配置及使用方法

  下载源代码,放到Pythonista中你想放的位置即可,使用Python 3进行运行。
  下载方式可以通过Working Copy下载导入,只是下载的话免费版就OK了。
  如果直接下载的文件夹到iPad中,可以先将项目文件夹移动到PythonistaiCloud中的文件夹中,然后再到Pythonista中将该文件夹移动到This iPad来,不过如果你就在iCloud文件夹中使用倒是也行。
  下载这个环节以后我会考虑写成一个像安装stash那样的自动化安装脚本,今后只需要在控制台输入一行命令就可以自动下载安装了。

收藏App

  首先将AppWishList文件夹下的ExtAddApp.py添加到Share Extention Shortcuts中,然后在浏览App Store的时候看见喜欢的应用时,点击分享按钮,然后选择Run Pythonista Script,在列表中选择运行之前添加的脚本就行了。


  看到显示“添加成功”就表示程序运行结束了,有的链接请求可能比较久,但只要不报错就肯定还在后台运行中。其实你只要立马点第二次系统就会提醒这个脚本已经在执行,就知道上一次还没结束了。
  不想等的话点击收藏以后直接关闭窗口就行了,它会在后台执行直到完成结束。一般你从一个应用界面切换到另一个应用界面的时间他也差不多该运行结束了。不过这样有个问题就是如果发生连接超时或链接有问题添加失败就不知道了。



  当重复添加同一个App的时候,会对该App执行更新操作,会获取最新的价格及应用信息,不过应用分类不会再改变,以第一次或用户自定义的为准。



  添加应用这个过程没有界面,都是通过提示框来显示信息,执行和时长取决于请求下载该页面的速度。后台在使用请求命令获取页面代码以后会自动解析出需要的信息,快的一秒就好了,一般平均也就两三秒的样子,收藏国外的软件可能要慢点。
  哎,其实我需要的只是整个页面最前面的一段jeson数据,奈何得把整个页面都下载下来,目前还没想好优化方法。
  不过值得注意的是,为了节省收藏用应用的时间,首次添加应用只获取了基本信息如应用图标的链接,并没有下载应用图标,因为下载图片的过程会比较慢,慢的可能要十秒左右。应用图标会在应用更新的时候检查下载。
  同一张图片下载以后只要不删除就不会再下载了,如果不想下载图标节省存储空间可以在设置页面关闭图片下载。

数据管理

  主界面这块之前的介绍也都说的差不多了,要注意的几点就是在数据更新的时候最好等更新完成了再进行操作,就算你把那个进度条窗口关了他也在后台执行,这个过程中再去访问后面的页面可能要出问题。
  由于以后应用多了每次数据更新会很耗时,如果只是想更新个别应用的数据的话,建议还是到详情界面单独更新。


  我在设置页面中还放了点数据统计,在几个功能设置按钮的最下方是数据清理选项,当然会有确认框二次确认,但在这块操作的时候要小心不要误触删库了...


通知

  在设置中开启降价通知(默认是开启的),只会当你愿望单(在应用详情中设置)中的应用在更新数据时检测到降价才会发起通知,价格的比较是根据最近一次采集到的数据来进行计算的。也就是说如果你长期不更新数据,程序会一直显示上一次计算的折扣,但不用担心,每条价格数据只会提醒一次,不会收到同一个折扣的重复提醒。

  由于使用提醒事项来实现消息提醒,因此需要对Pythonista开启访问提醒事项的权限。
  至于怎么开启,只需要在Pythonista中随便运行一个访问提醒事项的脚本即可,比如下面这个:

import reminders
r = reminders.Reminder()
r.title = 'Added from Pythonista'
r.save()
print('Reminder added')

  开启之后,所有的通知记录会放在自动创建的“AppWishList”分类列表中。

自动化更新

  使用苹果官方的快捷方式实现定时自动化更新的功能。在自动化中创建脚本,添加“运行Pythonista脚本”的命令,然后填上AppWishList文件夹下的AutoUpdateApp.py的路径,这个路径的起点是从Pythonista中的“This iPad”算起的,也就是用户能看到的根目录了。

  不过现在这个自动化功能有个问题,就是它到点了指挥给你个消息提醒和执行按钮跟你说该更新数据了,并不会自动执行代码,还是得需要用户手动点击确认一下才行。查了一下,是苹果出于用户的安全考虑留了一手。╮(╯▽╰)╭

今后待解决的问题

  1. 考虑之后像安装stash那样做一个自动化安装的脚本,今后只需要在控制台输入一行命令就可以自动下载安装了。
  2. 由于一开始设计程序的时候很多底层核心代码都放在了最外面一层文件夹,对用户来说体验不是很好,虽然以后都可以直接创建快捷方式来运行,但头一次还是不怎么好找。考虑过把文件整理一下,但不知道Pythonista的模块导入是有什么问题,当我把文件挪动后就死活导入不进来,提示没有这个模块,网上找了好多解决方案都不行。
  3. 好吧,我承认界面都做得比较丑,我也是边做边学,一开始ui模块也不熟悉。今后看到好看的UI再考虑借鉴过来优化完善吧,嘿嘿。
  4. 功能上的不足之后用的时候遇到了再添加吧,至少现在的功能够满足我自己的需求了,如果用户有什么需求或者使用过程中遇到Bug也可以在我的博客下方留言。

感想体会

  开发应用愿望单的想法从之前考研复习在高频使用iPad的时候就萌生了,但是由于有正事要做就先搁置了下来,不过也给了我时间思考和构想这个程序的设计。通过链接下载页面源码,解析并抓取jeson那段代码在当时闲暇的时候就已经写好了,获取了数据基本上最关键的问题就已经解决了,剩下的就是如何管理和呈现数据。

后台数据管理   对于数据管理这块说白了就是做一个“XXX管理系统”,平时在学校做的这类课程设计已经够多了,不过也从之前开发SpringBoot网站项目上吸取了很多经验,如模型层、控制层、服务层经典架构的使用还有日志系统和错误代码处理的技巧。
  整个系统做下来数据表改了三次,每一次改动都会从下往上的层层影响,都需要做出相应改动,可是吃够了苦头,也难怪不得数据库工程师那么吃香。不过也确实写的一手的好SQL语句就能省去后台代码很多计算量,也减轻了应用程序开发的负担。

前端数据展示   前端界面的话,最开始有想过渲染成网页或者PDF来查看,但不是做成服务器网站那种,就像是运行程序导出一张数据报表一样。但后来想一想,这样做还挺麻烦的,还不如直接做成图形用户界面来的方便快捷。可惜的就是只能使用Pythonista自己的ui库,相比我以前使用过的Qt或者pyqt还是差了不少,很多想要的组件都没有,但能重载View这个最基础的类也算是给了用户足够的发展空间。
  其实最累人的是使用这个ui库的开发遇到问题在国内基本上找不到好的解决方案,基本上没有什么关于这方面的博客文章,只有翻墙去外网谷歌搜索、官方论坛和github上找答案。当然最重要的就是仔细阅读官方文档,每天打开电脑的第一件事就是把文档网页打开,遇到问题就反反复复的查文档,现在这个文档基本上已经过通读了好几遍了,每个类有些什么方法和属性基本上也都快记下来了。
  整个程序就是在这样一个基本上完全英文的环境下开发出来的,虽然可以直接谷歌翻译整个网页,但是很多专业词汇翻出来都变了味,甚至把一些不该翻译的代码和变量名都翻译了,一些国外论坛上的回复也有打错字机翻不出来的地方。所以到头来还是自己直接看英文原文来的稳当,不过好在考完研以后现在的英语水平已经能应付的了了。

  这篇文章记录了我在开发过程中的一些笔记:学习日志200129:在AppWishList开发中遇到的一些问题

  这张图是最近这一个星期以来使用Pythonista的使用时间统计,算上之前零零散散还没计入的一些时间,整个程序开发应该有80+小时,而代码量的话使用SourceCounter软件统计出来有4633行。这段时间因为肺炎疫情禁足在家无所事事,也算是能全身心投入到这个差点就要烂尾不了了之的项目开发中来。每天从起床就开始写,除了吃饭和上厕所基本上整体就坐在平板和电脑面前,有的时候要干到晚上2点才睡觉,躺在床上满脑子也都是在想程序怎么设计更好。自大一、大二以来好久都没像这样痴迷于写一个程序了,能让我比打游戏看剧更上瘾的也唯有码瘾了,平均下来一天可能有12个小时的工作时间,不知不觉一天的时间就过去了。
  好在现在写完了,可以好好放松一下看看美剧了....╰( ̄▽ ̄)╭

About

基于Pythonista的苹果AppStore的愿望单系统

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%