Android运行脚本与定时工具

用惯了crontab,实验室的机器因为某些原因连不上,于是希望在自己的Android手机上完成定时执行一些脚本的任务。google一下找到了 android应用实现定时打电话 这样一篇文章,正好满足我的需求。下面做一个简单的总结。

安装的软件

  • SL4A(Scripting Layer for Android),Andriod系统下运行脚本的环境,可以在终端、后台或Locale中运行,现阶段支持Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl和shell脚本。

  • Py4A,SL4A的python插件,安装之后就可以运行python脚本。

  • TaskBomb task scheduler,一个可以执行计划任务的app,类似于Unix中的crontab。

  • SL4A Script Launcher,TaskBomb可以通过此app执行SL4A脚本。

简单使用

  • 安装Py4A后进入程序,点击最上边的Install会自动下载Python运行所需要的类库。

  • 进入SL4A会看到在SL4A程序Scripts目录下的脚本,可以在terminal或后台运行这些脚本;在SL4A中可以添加、修改、删除脚本程序,使用方法很简单,不详细说明。

  • 需要注意的是Py4A支持的是python2.6,最新的python-for-android的项目地址已经在 这里 。Py4A不仅支持python的原生API,同时可以很方便的调用Android的系统API,比如可以使用下边很简单的代码向目标手机发送短信。详细可参考 ApiReference

1
2
3
4
import android

droid = android.Android()
droid.smsSend('15120000xxx', 'this is an sms auto sent by Py4A.')

其他

最后这部分就是与文章内容不相关了。是一个虾米音乐自动签到的程序。需要注意的就是登录时一定要将headers中的User-Agent修改为浏览器的User-Agent,签到的post请求需要修改headers中的User-Agent和Referer地址。其他就没有什么了(突然想到和某只喵喵的比赛是不是可以拿TaskBomb+SL4A作弊),各位看官求轻拍,捂面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# -*- coding: utf-8 -*-

import urllib2, urllib

def login(email, password):
    try:
        cookies = urllib2.HTTPCookieProcessor()
        opener = urllib2.build_opener(cookies)
        urllib2.install_opener(opener)
        params = {'email':email, 'password':password, 'submit':'登 录'}
        loginUrl = 'http://www.xiami.com/member/login'

        headers = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17",
            }
        request = urllib2.Request(
            url     = loginUrl,
            headers = headers,
            data    = urllib.urlencode(params)
            )
        login = urllib2.urlopen(request)
        print 'login successfully...'
        return login
    except Exception, e:
        print 'login failed:', e
        return None

def signin(email, password):
    signurl = 'http://www.xiami.com/task/signin'
    if login(email, password) != None:
        try:
            headers = {
                "Referer": "http://www.xiami.com/?register",
                "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17",
            }
            request = urllib2.Request(
              url  = signurl,
              headers = headers
              )
            response = urllib2.urlopen(request)
            retcode = response.read()
            if str.isdigit(retcode):
              print 'sign in days:', retcode
        except Exception, e:
            print 'signin error:', e

if __name__ == '__main__':
    email = 'xxx'
    password = 'xxx'
    signin(email, password)

参考

android应用实现定时打电话google code SL4A

Comments