[野生技术]使用php实现天气预报短信提醒|千与琥珀的河川

[野生技术]使用php实现天气预报短信提醒

千与琥珀

琥珀提醒你:


这任务需要舍得折腾如果你不想折腾,你完全可以发送511到10086实现完全相同的效果(p.s:广西移不动)。

亲,才3块大洋/月,真的不贵哦

前记: 前天晚上痛快淋了来桂林的第三场雨,而且全身都湿透了,安了,安了,权当洗个凉水澡吧,反正已经是夏天了。 都是出门前没看天气的后果,虽然说目前天气预报能有70%的准确率已经谢天谢地了,但是看看也好,反正不会掉节操。 随后发短信去骚扰10086顺便看了看天气预报的价格,喵了个咪的,这么xx的东东竟然要收费3块大洋/月,喵的咧,反正移动邮箱不是有个免费短信提醒的功能,不用白不用,能省点就省点。 准备家伙 能发邮件的php服务器x1 (实在没有,渣浪的sae表示也是可以滴,就发送邮件部分的代码得自己折腾一下) 能发短信的邮箱x1 (移动的139、 电信的天翼 、麻花疼的qq手机邮箱、养殖专业户的163手机号邮箱...... 都可以) 爪机x1 (这个必备) 定时服务x1 (是个apche主机都支持Cron Job,实在木有就去setcronjob申请一个) 实现步骤 1.在准备好的主机上创建一个php文件。 2.获取中国天气网的api 先打开http://weather.com.cn/,然后在上面搜索你的城市地名(可以精确到县)然后获取地址http://www.weather.com.cn/weather/101300501.shtml其中101300501就是你的城市编号然后把(http://m.weather.com.cn/data/101300501.html)这条链接的101300501换成你的城市编号. 3.复制下方代码(注意修改)
<?php header("Content-Type: text/html; charset=UTF-8"); /*2012年6月24日修改,把读取方式换成了更稳定的curl*/ $curl = curl_init(); curl_setopt($curl,CURLOPT_URL,'http://m.weather.com.cn/data/101300501.html');//api填写位置 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $json = curl_exec($curl); curl_close($curl); /*这是之前的 $json = file_get_contents("http://m.weather.com.cn/data/101300501.html");*/ $j=json_decode($json); $html= $j->weatherinfo->city .",". $j->weatherinfo->date_y . "(". $j->weatherinfo->week .")的天气是:" .$j->weatherinfo->weather1.",气温". $j->weatherinfo->temp1 ."(". $j->weatherinfo->index48 .")," . $j->weatherinfo->wind1 . "穿衣指数:".$j->weatherinfo->index48_d ;//短信的提示信息(附一) /*因为139邮箱接收其他编码的邮件会乱码,这里先编码*/ function Encode($str){//对中文进行编码的函数 $str=base64_encode($str); $str= "=?"."UTF-8?B?".$str."?="; return $str; } $title =Encode("天气预报");//标题,自己改 $to = "***********@139.com"; // 乃的邮箱 $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";//UTF-8 if(mail($to, $title, $html, $headers)) echo "ok"; else echo "error"; ?>
4.设置一个计划任务 现在,我们要定期触发它才能完成预先的效果,下面开始教程 在Cron Job命令中写入下面语句,调整好执行时间,这里仅提供一条例子(具体实现方法请去问主机商)。:
lynx > /dev/null -dump http://你的文件地址
图片示例:

        当然,为了节省服务器资源,我推荐下面这种方法,比较适合新手,且设置简单 先去setcronjob申请一个定时服务的账户,然后设置示例如下图,此外琥珀提醒你,这东东需要每31天去续期一次,并且添加的任务个数也不是无限的,人品(:-D)爆了就添加不了了。

                    至此,任务全部完工。 后记: 写完后最好手工执行一次那个文件,如果返回ok,并且收到短信,就说明可以工作了,否则得检查一下那填错了。 此外收到邮件后记得把你的发信人和发信域添加到白名单中,免得被丢到垃圾邮件去了。 还有,链接地址别泄露了,否则执行一次就发一条短信,不过你也可以利用函数获取utc时间配合if函数来划出一个发送短信的时间段,免得被骚扰   最后特别感谢一下好人小邪,原来这东东返回的是stdClass Object,一开始没判断对,还以为是多维数组,此外手册中也写了判断方法。
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] ) assoc: When TRUE, returned objects will be converted into associative arrays. 如果 $assoc 是 true 的话返回的是数组,如果是 false(默认)的话则是 stdClass Object。
附一: 用api取回的数据(用$j->weatherinfo->数据名来取得数据结果)
stdClass Object ( [weatherinfo] => stdClass Object ( [city] => 桂林 [city_en] => guilin [date_y] => 2012年6月22日 [date] => [week] => 星期五 [fchh] => 18 [cityid] => 101300501 [temp1] => 24℃~28℃ [temp2] => 25℃~28℃ [temp3] => 26℃~30℃ [temp4] => 26℃~31℃ [temp5] => 26℃~32℃ [temp6] => 25℃~33℃ [tempF1] => 75.2℉~82.4℉ [tempF2] => 77℉~82.4℉ [tempF3] => 78.8℉~86℉ [tempF4] => 78.8℉~87.8℉ [tempF5] => 78.8℉~89.6℉ [tempF6] => 77℉~91.4℉ [weather1] => 暴雨 [weather2] => 暴雨转中雨 [weather3] => 阵雨 [weather4] => 阵雨转多云 [weather5] => 阵雨转多云 [weather6] => 阵雨转多云 [img1] => 10 [img2] => 99 [img3] => 10 [img4] => 8 [img5] => 3 [img6] => 99 [img7] => 3 [img8] => 1 [img9] => 3 [img10] => 1 [img11] => 3 [img12] => 1 [img_single] => 10 [img_title1] => 暴雨 [img_title2] => 暴雨 [img_title3] => 暴雨 [img_title4] => 中雨 [img_title5] => 阵雨 [img_title6] => 阵雨 [img_title7] => 阵雨 [img_title8] => 多云 [img_title9] => 阵雨 [img_title10] => 多云 [img_title11] => 阵雨 [img_title12] => 多云 [img_title_single] => 暴雨 [wind1] => 北风3-4级 [wind2] => 北风3-4级 [wind3] => 北风3-4级 [wind4] => 北风3-4级 [wind5] => 北风3-4级 [wind6] => 北风3-4级 [fx1] => 北风 [fx2] => 北风 [fl1] => 3-4级 [fl2] => 3-4级 [fl3] => 3-4级 [fl4] => 3-4级 [fl5] => 3-4级 [fl6] => 3-4级 [index] => 热 [index_d] => 天气较热,建议着短裙、短裤、短套装、T恤等夏季服装。年老体弱者宜着长袖衬衫和单裤。 [index48] => 热 [index48_d] => 天气较热,建议着短裙、短裤、短套装、T恤等夏季服装。年老体弱者宜着长袖衬衫和单裤。 [index_uv] => 弱 [index48_uv] => 弱 [index_xc] => 不宜 [index_tr] => 较不宜 [index_co] => 较舒适 [st1] => 26 [st2] => 22 [st3] => 26 [st4] => 21 [st5] => 26 [st6] => 22 [index_cl] => 不宜 [index_ls] => 不宜 [index_ag] => 极不易发 ) )
到此本教程就结束,是不是感觉特别简单,其实只要自己多去想想,多去折腾一下,一切就是如此简单,既省了钱,又收获了知识,何乐而不为呢? 最后,让我们团结起来,一起把吸血的运营商给榨空!!! 最终效果(诺记的爪机献丑了)

login……