PHP Client for Apple Push Notification Service

源码在:https://github.com/sskaje/apns

协议消息体使用的是APNS的简版消息结构,暂不支持Enhanced notification format,即不支持identifier和expiry,省了8个字节,不过稍后有空会加上。

大致的数据逻辑是:

走了个异步队列。应用将推送数据按公用结构(适配非APNS的推送需求)带上推送的目标设备类型+客户端标识(支持同平台下多款应用的推送)所用的队列;后端程序阻塞或非阻塞的模式从队列里取数据,然后根据数据信息写APNS或者其他类型终端(例如Android)的推送服务。

开发过程中遇到的最大问题主要在 stream_socket_client() 的 STREAM_CLIENT_PERSISTENT 使用上:

Continue reading “PHP Client for Apple Push Notification Service” »

PHP Client for Apple Push Notification Service by @sskaje: https://sskaje.me/2012/11/apns-client/

AppShopper 导入Appstore 历史购买记录

功能页面:http://sskaje.me/sskaje/appstore2appshopper/ (执行速度很慢,建议下载源码自己跑CLI)。
页面源码 http://sskaje.me/sskaje/appstore2appshopper/?s ,各路代码在 https://github.com/sskaje/appstore

以前写的iTunes Gift Card AutoRedeemer在 /index.php/2012/03/itunes-gift-card-autoredeemer/,这个版本把代码集成进去了,但是没测能不能用,因为现在自己没需求了。

iTunes Appstore这边没啥可说的,抓包就是了。

关于Appshopper,一开始的实现方案是使用他家的iOS App,用Charles Proxy抓包拿到完整https的协议(关于Charles Proxy的破解点这里),前一天晚上看了下他家网站提交数据的参数。发现如果需要把某个App添加到wishlist/myapp里,app id能直接拿到,但是还需要查到一个updateid。这个updateid从他家网页实在不好查,虽然可以匹配,但是流程会很麻烦,好在他家iOS App有个detail的接口,能拿到包括 updateid, wantit, ownit 这样的字段。这样实现起来,就逐个app地去查updateid和是否已经添加到wishlist/myapp,若未添加则执行添加。效率堪忧。

Continue reading “AppShopper 导入Appstore 历史购买记录” »

AppShopper 导入Appstore 历史购买记录 by @sskaje: https://sskaje.me/2012/07/appshopper-%e5%af%bc%e5%85%a5appstore-%e5%8e%86%e5%8f%b2%e8%b4%ad%e4%b9%b0%e8%ae%b0%e5%bd%95/

iTunes Gift Card AutoRedeemer

应该没人会有需求,具体应用需求来源不说了。

最开始一直想研究itunes的下载协议,但是中间因为某些原因,先搞了这个。

基本只是实现了登录、load redeem页(有form token)、提交请求(pc端有校验,相当于确认过程,需要输入apple id和密码)。

具体代码在http://sskaje.me/sskaje/code/itunes/auto_redeemer.php,敏感字段已移除或xx掉了,细节没处理,姑且看个协议大概。

用法:
php auto_redeemer.php XXXXXXXXXXXX
php auto_redeemer.php itunes.gift.card.list
php auto_redeemer.php

后两种使用文件,每行一个code,第三种情况默认取itunes.log。

至于下载协议,由于有个签名字段,一直没搞定,半吊子逆向能力,等有空再研究,一直有个设想还没去验证。

iTunes Gift Card AutoRedeemer by @sskaje: https://sskaje.me/2012/03/itunes-gift-card-autoredeemer/

Patches for SphinxSearch Supporting 64-bit Range Step & 64-bit Search Filter

sphinxsearch. Patches available for 2.0.3-release, 2.0.4-release.

当configure指定参数 –enable-id64 时

1 增加 sql_range_step 字段的64位支持
2 调整 bin/search 的filter值为64位

Patches:
for SphinxSearch 2.0.3
for SphinxSearch 2.0.4

示例:
tar xvf sphinx-2.0.3-release.tar.gz

cd sphinx-2.0.3-release

patch -p1 < ../sphinx-2.0.3-release.64.patch ./configure --enable-id64 --prefix=/opt/sphinx203 --with-mysql make -j4 install cd /opt/sphinx203 ./bin/search -c etc/sphinx.ticket.conf -i your_index_name -q -f bigint_field 1110010011010313572

Patches for SphinxSearch Supporting 64-bit Range Step & 64-bit Search Filter by @sskaje: https://sskaje.me/2012/03/patch-for-sphinxsearch-64-bit/

12306刷票记

我也记不清啥时候动了写bot刷票这个念头的。原因很简单,我一直认为作为一个以代码谋生的不合格程序员,只有把生产工具用好,才能增加自己存在的价值。

首先说明一下主要开发环境:Windows 7,PHP 5.3,php_curl。

翻到了 第一条关于刷票的微博,附了图

很不低调地炫耀。

要刷票,首先自然得熟悉目标系统,所谓踩点。firefox+firebug,抓了一个标准流程的请求:登录、查票、订票。确认订单一开始没敢点,怕会有什么影响,后来去注册了几个测试号,然后尝试了确认订单的操作。流程本身不复杂,但是提交参数有点太多,一步一步来。

回到图1,登录,其实核心在验证码。

Continue reading “12306刷票记” »

12306刷票记 by @sskaje: https://sskaje.me/2012/01/12306bot/