【Python成长之路】如何用python开发自己的iphone应用程序,并添加至siri指令

【Python成长之路】如何用python开发自己的iphone应用程序,并添加至siri指令

哈喽大家好,我是鹏哥。

今天想记录的学习主题是 —— 基于pythonista3 app开发自己的iphone应用程序。

~~~上课铃~~~

(由于今天被小伙伴推荐了这首歌,因此就应他的要求,作为此文的背景音乐吧!)

あいの唄wacci - 感情百景(期間生産限定盤)

1

写在前面

之前看到翔哥发过一篇如何将安卓手机打造成Python开发环境,心生羡慕。可是由于不舍得那么多的英雄和皮肤,因此只能继续玩着iphone。

网上有很多人都说Appstore里也有 python的开发工具:Pythonista 3,售价68元。对这款app,大家的评价都被五毛党刷成:虽贵真香。抱着被骗的心态,我也花了68元大洋玩了。结果是:

真香!真香!

2

效果展示

本次开发的应用程序(其实就是个小程序,但是不做标题党,没人关注呀)是个查看杭州天气的功能。

桌面app:weather

运行结果:

点击桌面app图标或者通过siri “查看天气”:,都可以实现以下功能。

3

如何玩呢

下面我从零开始,一步步教大家如何开发属于自己的iphone应用。

(1)从Appstore下载pythonista 3

(2)安装pip依赖的环境脚本:stash库

python之所以简单易用,能通过Pip命令快速安装python库是其中重要的一个原因。因为如果在手机上开发python应用,自然也要安装各种依赖库。但是Pythonista 3本身并不支持pip命令,但是国外大神自己在GitHub上编写了程序,实现了iphone pip命令的调用。

有兴趣的同学,可以访问以下地址学习Pip具体实现的代码实现。

GitHub地址:https://github.com/ywangd/stash

那么我们如何在iphone上下载stash库呢?

很简单,在pythonista 3的console界面输入以下代码:

import requests as r;exec(r.get('https://bit.ly/get-stash').text)

Tips: 一直右划,就会划到console界面

(3)下载stash及调用launch_stach.py的坑:

如果你家网络不好,你就会遇到下面的报错了:HTTPSConnect连接超时。

这里有个办法可以规避,即用电脑直接从github网站上下载getstash.py,然后通过微信转给iphone。最后在iphone 执行getstash.py也可以成功下载stash库。

成功界面如下:

下载成功的stash库会在site-packagesX里(如下图,随机一个文件夹)

从这 里还可以看到Python2/3的标准库也被pythonista 3统一下载好了,太贴心!

然后你会发现,怎么没有启动Pip的脚本:launch_stach.py呢?因为launch_stach.py被自动放到了iphone的最外层文件夹。

然后你就可以像电脑上一样,通过pip命令下载库了:

Tips: 有些库还是无法下载的,如Pyqt5

(4)编写python代码

说实话,在iphone上写爬虫代码有点傻,因为手机打字还是不方便。因此我是在电脑上编码,然后通过微信传到手机上实现的。

(5)在桌面上添加应用程序图标

在Pythonista 工具按钮里,有个Home Screen图标,即可将代码添加至iphone桌面上,如下图(为什么是通话中?因为welcome to join the conference……,某些同学懂)

(6)添加快捷命令到siri

选择创建快捷指令,然后选择脚本--pythonista3 运行脚本。这些操作按界面提示来即可,没什么难度了。然后就可以通过“嗨 Siri”来帮你自动运行python脚本了。是不是很屌?

4

示例代码

查看杭州天气的代码,可以查看之前的博客:【Python成长之路】python 从零学爬虫 -- 获取杭州天气,

因此不再详细介绍代码了。

# coding=utf-8

# @Auther : "鹏哥贼优秀"

# @Date : 2019/7/28

# @Software : PyCharm

import random

from bs4 import BeautifulSoup

import requests

def getheaders():

user_list = [

"Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",

"Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14",

"Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14",

"Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02",

"Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00",

"Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00",

"Opera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00",

"Opera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00",

"Mozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/14.0 Opera/12.0",

"Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62",

"Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62",

"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",

"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52",

"Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51",

"Opera/9.80 (X11; Linux x86_64; U; fr) Presto/2.9.168 Version/11.50",

"Opera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50",

"Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11",

"Opera/9.80 (X11; Linux i686; U; es-ES) Presto/2.8.131 Version/11.11",

"Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/5.0 Opera 11.11",

"Opera/9.80 (X11; Linux x86_64; U; bg) Presto/2.8.131 Version/11.10",

"Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10",

"Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10",

"Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1",

"Opera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01",

"Opera/9.80 (X11; Linux i686; U; ja) Presto/2.7.62 Version/11.01",

"Opera/9.80 (X11; Linux i686; U; fr) Presto/2.7.62 Version/11.01",

"Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01",

"Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.7.62 Version/11.01",

"Opera/9.80 (Windows NT 6.1; U; sv) Presto/2.7.62 Version/11.01",

"Opera/9.80 (Windows NT 6.1; U; en-US) Presto/2.7.62 Version/11.01",

"Opera/9.80 (Windows NT 6.1; U; cs) Presto/2.7.62 Version/11.01",

"Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.7.62 Version/11.01",

"Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.7.62 Version/11.01",

"Opera/9.80 (Windows NT 5.1; U;) Presto/2.7.62 Version/11.01",

"Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.7.62 Version/11.01",

"Mozilla/5.0 (Windows NT 6.1; U; nl; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01",

"Mozilla/5.0 (Windows NT 6.1; U; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01",

"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; de) Opera 11.01",

"Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00",

"Opera/9.80 (X11; Linux i686; U; it) Presto/2.7.62 Version/11.00",

"Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.6.37 Version/11.00",

"Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.7.62 Version/11.00",

"Opera/9.80 (Windows NT 6.1; U; ko) Presto/2.7.62 Version/11.00",

"Opera/9.80 (Windows NT 6.1; U; fi) Presto/2.7.62 Version/11.00",

"Opera/9.80 (Windows NT 6.1; U; en-GB) Presto/2.7.62 Version/11.00",

"Opera/9.80 (Windows NT 6.1 x64; U; en) Presto/2.7.62 Version/11.00",

"Opera/9.80 (Windows NT 6.0; U; en) Presto/2.7.39 Version/11.00"

]

user_agent = random.choice(user_list)

headers = {'User-Agent': user_agent}

return headers

def weather():

url = "http://www.weather.com.cn/weather/101210101.shtml"

headers = getheaders()

r = requests.get(url, headers=headers)

r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, "lxml")

lines = soup.find('li', class_="sky skyid lv2 on")

date = lines.h1.get_text()

weather = lines.p.string

low_temp = lines.find('p', class_="tem").i.get_text()

if not lines.find('p', class_="tem").span:

high_temp = "未知"

else:

high_temp = lines.find('p', class_="tem").span.get_text()

temp = high_temp + '-' + low_temp

wind = lines.find('span', class_="NNW").get('title')

windnumber = lines.find('p', class_="win").i.get_text()

result = {

"日期": date,

"天气": weather,

"温度": temp,

"风向": wind,

"风级": windnumber

}

print(u"日期:{0} \n天气:{1} \n温度:{2} \n风向:{3} \n风级:{4}".format(date, weather, temp, wind, windnumber))

return result

if __name__ == "__main__":

print('*****程序开始!******')

weather()

print('*****程序结束!******')

对了,要运行这段代码,需要在pyhonista中下载lxml库。如果不想下载,可以将soup = BeautifulSoup(r.text, "lxml") 改成,效果是一样的。

soup = BeautifulSoup(s, "html.parser")

5

总结

Pythonista3 在sample里有些很有意思的代码,如消消乐(300行代码实现的,大神是真的牛逼!)、三维绘图等。

然后预告下周的博客主题,基于Pythonista 3开发自己的iphone入口,如下图。好啦,下周见!

~~~下课铃~~~

点击下方诗句,可以留言互动喔

清风以北过南巷,南巷故人不知归。你本无意穿堂风,偏偏孤倨引山洪。

扫描二维码

与鹏哥一起

学python吧!

相关推荐

安防设备包括哪些(全面解析:安防设备包括哪些种类及应用)
名侦探柯南 (1996)    Full online with English subtitle for free – iQIYI
腰围二尺四是多少厘米 女性腰围2尺4是多少厘米
365bet体育在线娱乐场

腰围二尺四是多少厘米 女性腰围2尺4是多少厘米

📅 07-21 👁️ 4430
腾达和TP-Link路由器比较
365bet体育在线娱乐场

腾达和TP-Link路由器比较

📅 09-19 👁️ 948
谁说地府只能防天策? 神武服战DF为什么没人带
微博怎么设置消息提醒?轻松掌握这些技巧,让你不再错过任何重要通知!
海外用yy语音遇到地区限制没法使用怎么办?海外YY开黑必看
牛奶灌肠可以吗
365BET-官网

牛奶灌肠可以吗

📅 08-14 👁️ 638
小冰冰传奇厨娘怎么样 厨娘技能属性全解
365BET-官网

小冰冰传奇厨娘怎么样 厨娘技能属性全解

📅 06-29 👁️ 5899