手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2009年06月9日的文章

小家伙生日

今天是6月9日,农历五月十七
小家伙的生日。可惜我在加班没有陪他

不过还好,6月20日是阳历生日。
到时候陪他吃面条吧。

农历生日老婆不愿意过。不过对于一个传统的人来说,我还是希望他过阴历生日的。

生日快乐,佑阳

校内狗狗刷骨头的代码

本文是yhustc在娱乐之余利用PHP代码写的刷骨头的文章,现在不知道还能不能用了,但思路和技巧可以参考(这里还有一篇利用greasemonkey来玩开心农场的文章,也可以学习一下哦)

原文网址:http://www.yhustc.com/Blog/172.html

从文章中可以了解,这里面最关键的算法在于code的计算,每一次操作都会返回一个key,用于计算下一次操作的code。如果没有这个,那你所做的外挂程序就无效了。

根据yhustc提供的流程,建议采用firefox(使用firebug插件)进行查看分析(当然还有更多的HTTP分析软件)

不多说了,原文如下:

PHP写的,重在分析,不在可以全文COPY的代码。

校内赚骨头的方法很多,最快的是邀请一下自己的MSN好友,一次送400根。用自己的MSN用户名密码登录后,选任何一个好友(比如自己的MSN小号),直接确定,400根骨头到货了。

但是要不断的得到新的骨头,还要速度快,得靠刷。刷骨头有几个方法,一个是自动玩飞盘,接中一次3根骨头,总体趋势还是赚的。一种是喂其他人的小狗,要喂饥饿,体力为0的,有一根以上的骨头反馈,我遇到过奖20根骨头。

我用的就是第二个方法,因为我发现不是好友的小狗也是可以喂的,也就是喂狗的页面把那个pid从1到***不断的狂加,每个页面试一把,找到饥饿的小狗就喂。

流程如下:

1、登录拿到自己的校内id (actor_Fid)。

2、http://dog.xiaonei.com/pet-profile.do?method=dogXML&&pid+自增ID+&t=毫秒单位时间戳得到小狗的XML格式的属性和用于计算验证code的key

3、如果是饥饿的小狗,喂水、喂食,pid加一回到第二步去找下一只饥饿的小狗

4、喂水、喂食用的是同一个method,只是active_Fid这个参数不同,都会返回当前状态和下一轮计算使用的key,可以在这里检查一下返回,如果狗粮不够了,自动去买一下(这一步很简单,就是一个POST)

补充:首发的时候忘记说明了,买狗粮因为买40kg的,每一袋至少赚6根骨头(喂一只狗花1Kg狗粮,最少加一 根骨头,40Kg狗粮34根骨头一袋),所以默认是买40kg的狗粮,那就要求程序第一次运行的时候有足够的骨头。如果没有这么多,可以修改 Dog.php第139行,把"buy_id"=>3设置成1或2,也就是买5或20Kg的狗粮。

一天刷下来能刷很不少骨头,外加爱心等级飙升。

关键的算法在于code的计算,每一次操作都会返回一个key,用于计算下一次操作的code,参考了一下别人的文章,计算code用下面这个函数

php代码
  1. private function getCode($petId,$key)  
  2. {  
  3.    return md5($key."#".$petId."#".$this->actor_Fid."#".'%$T&*jkhjksdhfjk$%^&*BJHhh');  

后面那堆字符问我怎么知道的?抄的。google 校内狗狗 key code,看到一篇分析文章,他反编译了那个flash,看到的字符串常量。要不然鬼能反过来算这个md5里面是啥。

有了这个code外加cookie,校内的验证就算是过了,那么不断的找饥饿的小狗,post相应动作,其实就跟自己人肉搜索饥饿小狗,再点那个 flash一样。详细代码见附件列表。里面有个Http基类,这个里面封装了curl的get和post操作,带cookie。如果要写需要维护登录状态 的PHP代码,倒是可以用用,直接extends Http,然后调用$this->get $this->post就可以了。

说一下玩飞盘吧,这个实现也就是一个POST请求,返回的数据里会有小狗的属性,可以在体力不足的时候POST一个喂食操作。但是当玩到一定次数的 时候,会有验证码,其实这个验证码破解不难,有兴趣的可以捣鼓捣鼓,切割成单个字母用最大相似度匹配应该可以。由于我自己只是看看流程,不玩狗狗,所以没 有写这部分代码。

运行方式:修改Dog.php最下面的用户名和密码,把php目录添加到path里,在控制台下运行php Dog.php即可。

附件嘛。。。。我这里可以下载,也可以去原文进行下载。

4a09477ae1be3.rar

Tags: 校内网, 骨头

PHP自动识别字符集并完成转码

在PHP处理页面的时候,我们对于字符集的转换都是采用了iconv或者mb_convert等函数,但,这其实是有一个前提的。即我们事先得知道in和out是什么样的编码,我们才能进行正确的转换。
虽然大多数转换都是在gbk和utf-8之间转,但如果不知道转换对象的编码怎么办呢?yhustc.com上就有这么一个函数safeEncoding,可以简单的识别UTF8和GBK的编码(国内,基本上也就这两种最常用吧。big5?咱们不考虑,哈哈)

原文地址为:http://www.yhustc.com/Blog/156.html
内容如下:

YBlog能接收引用通告,但是因为YBlog自己使用的是utf-8编码,如果对方的博客系统使用gb2312的编码的话,POST过来就会出现 乱码(除非对方POST前先转换编码)。在不能保证对方是否一定使用utf-8编码的情况下,自己做一个编码的检查和转换是很有必要的。写了个函数来完成 这个工作,原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英 文不管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。

如果是文件形式的编码检查,还可以直接check utf-8的BOM信息,关于这方面的东西,大家可以看看TP工具箱的编码转换功能,我在那个AppCodingSwitch类中写了比较详细的注释。

话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。文件的检查与转码,看这里 [膘叔注:这个链接已经不存在了]

php代码
  1. //识别汉字编码,因为YBlog用的是utf-8,如果引用通告发过来的是gb2312的编码的话,需要可以识别并完成编码转换  
  2. function safeEncoding($string,$outEncoding = 'UTF-8')  
  3. {  
  4.     $encoding = "UTF-8";  
  5.     for($i=0;$i<strlen($string);$i++)  
  6.     {  
  7.         if(ord($string{$i})<128)  
  8.             continue;  
  9.  
  10.         if((ord($string{$i})&224)==224)  
  11.         {  
  12.             //第一个字节判断通过  
  13.             $char = $string{++$i};  
  14.             if((ord($char)&128)==128)  
  15.             {  
  16.                 //第二个字节判断通过  
  17.                 $char = $string{++$i};  
  18.                 if((ord($char)&128)==128)  
  19.                 {  
  20.                     $encoding = "UTF-8";  
  21.                     break;  
  22.                 }  
  23.             }  
  24.         }  
  25.         if((ord($string{$i})&192)==192)  
  26.         {  
  27.             //第一个字节判断通过  
  28.             $char = $string{++$i};  
  29.             if((ord($char)&128)==128)  
  30.             {  
  31.                 //第二个字节判断通过  
  32.                 $encoding = "GB2312";  
  33.                 break;  
  34.             }  
  35.         }  
  36.     }  
  37.       
  38.     if(strtoupper($encoding) == strtoupper($outEncoding))  
  39.         return $string;  
  40.     else 
  41.         return iconv($encoding,$outEncoding,$string);  

 

 

Tags: 编码, 转换

学习Jquery之旅--新手必须知道的常用方法

原文:http://www.cnblogs.com/gaoweipeng/archive/2009/06/09/1498333.html

Jquery中常用的函数方法总结

Jquery中为我们提供了很多有用的方法和属性,自己总结的一些常用的函数,方法。个人认为在开发中会比较常用的,仅供大家学习和参考。

事件处理 

ready(fn)

代码
$(document).ready(function(){
  // Your code here...
});


作用:它可以极大地提高web应用程序的响应速度。通过使用这个方法,可以在DOM载入就绪能够读取并操纵时立即调用你所绑定的函数,而99.99%的JavaScript函数都需要在那一刻执行。

bind(type,[data],fn)

代码
$("p").bind("click", function(){
  alert( $(this).text() );
});


作用:为每一个匹配元素的特定事件(像click)绑定一个事件处理器函数。起到事件监听的作用。

toggle(fn,fn)
代码:

$("td").toggle(
  function () {
    $(this).addClass("selected");
  },
  function () {
    $(this).removeClass("selected");
  }
);


作用:每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。挺有趣的一个函数,在动态实现某些功能的时候可能会用到。

(像click(),focus(),keydown()这样的事件这里就不提了,那些都是开发中比较常用到的。)


外观效果

addClass(class)和removeClass(class)

代码
$(".stripe tr").mouseover(function(){ 
               $(this).addClass("over");}).mouseout(function(){
               $(this).removeClass("over");})
});
也可以写成:
$(".stripe tr").mouseover(function() { $(this).addClass("over") });
$(".stripe tr").mouseout(function() { $(this).removeClass("over") });


作用:为指定的元素添加或移除样式,从而实现动态的样式效果,上面的实例中实现鼠标移动双色表格的代码。

css(name,value)

代码:
$("p").css("color","red");


作用:很简单,就是在匹配的元素中,设置一个样式属性的值。这个个人感觉和上面的addClass(class)有点类似。

slide(),hide(),fadeIn(), fadeout(), slideUp() ,slideDown()

代码

$("#btnShow").bind("click",function(event){ $("#divMsg").show() });
$("#btnHide").bind("click",function(evnet){ $("#divMsg").hide() });

 

作用:Jquery中提供的比较常用的几个动态效果的函数。还可以添加参数:show(speed,[callback])以优雅的动画显示所有匹配的元素,并在显示完成后可选地触发一个回调函数。

animate(params[,duration[,easing[,callback]]])


作用:制作动画效果用到的函数,功能非常的强大,可以连续使用此函数。

查找筛选

map(callback)
HTML 代码:
<p><b>Values: </b></p>
<form>
  <input type="text" name="name" value="John"/>
  <input type="text" name="password" value="password"/>
  <input type="text" name="url" value="http://ejohn.org/%22/>
</form>
jQuery 代码:
$("p").append( $("input").map(function(){
  return $(this).val();
}).get().join(", ") );
结果:
[ <p>John, password, http://ejohn.org/%3C/p> ]

 
作用:将一组元素转换成其他数组(不论是否是元素数组)你可以用这个函数来建立一个列表,不论是值、属性还是CSS样式,或者其他特别形式。这都可以用'$.map()'来方便的建立。

find(expr)

HTML 代码:

<p><span>Hello</span>, how are you?</p>
jQuery 代码:

$("p").find("span")
结果:

[ <span>Hello</span> ]


作用:搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。

文档处理

attr(key,value)
HTML 代码:
<img/><img/>
jQuery 代码:
$("img").attr("src","test.jpg");


作用:取得或设置匹配元素的属性值。通过这个方法可以方便地从第一个匹配元素中获取一个属性的值。如果元素没有相应属性,则返回 undefined 。在控制HTML标记上是必备的工具。


html()/html(val)
HTML 代码:
<div><p>Hello</p></div>
jQuery 代码:
$("div").html();
结果:
Hello


作用:取得或设置匹配元素的html内容,同类型的方法还有text()和val()。前者是取得所有匹配元素的内容。,后者是获得匹配元素的当前值。三者有相似的地方常用在内容的操作上。

wrap(html)
HTML 代码:
<p>Test Paragraph.</p>
jQuery 代码:
$("p").wrap("<div class='wrap'></div>");
结果:
<div class="wrap"><p>Test Paragraph.</p></div>

 
作用:把所有匹配的元素用其他元素的结构化标记包裹起来。
这种包装对于在文档中插入额外的结构化标记最有用,而且它不会破坏原始文档的语义品质。 可以灵活的修改我们的DOM。

empty()
HTML 代码:
<p>Hello, <span>Person</span> <a href="#">and person</a></p>
jQuery 代码:
$("p").empty();
结果:
<p></p>


作用:删除匹配的元素集合中所有的子节点。

 

Ajax处理

load(url,[data],[callback])
url (String) : 待装入 HTML 网页网址。
data (Map) : (可选) 发送至服务器的 key/value 数据。
callback (Callback) : (可选) 载入成功时回调函数。

代码:

$("#feeds").load("feeds.aspx", {limit: 25}, function(){
   alert("The last 25 entries in the feed have been loaded");
 });


作用:载入远程 HTML 文件代码并插入至 DOM 中。这也是Jquery操作Ajax最常用最有效的方法。


serialize()
HTML 代码:
<p id="results"><b>Results: </b> </p>
<form>
  <select name="single">
    <option>Single</option>
    <option>Single2</option>
  </select>
  <select name="multiple" multiple="multiple">
    <option selected="selected">Multiple</option>
    <option>Multiple2</option>
    <option selected="selected">Multiple3</option>
  </select><br/>
  <input type="checkbox" name="check" value="check1"/> check1
  <input type="checkbox" name="check" value="check2"
checked="checked"/> check2
  <input type="radio" name="radio" value="radio1"
checked="checked"/> radio1
  <input type="radio" name="radio" value="radio2"/> radio2
</form>
jQuery 代码:
$("#results").append( "<tt>" + $("form").serialize() + "</tt>" );


作用:序列化表格内容为字符串。用于 Ajax 请求。

 

工具

jQuery.each(obj,callback)

代码
$.each( [0,1,2], function(i, n){
  alert( "Item #" + i + ": " + n );
});//遍历数组
$.each( { name: "John", lang: "JS" }, function(i, n){
  alert( "Name: " + i + ", Value: " + n );//遍历对象
});


作用:通用例遍方法,可用于例遍对象和数组。

jQuery.makeArray(obj)
HTML 代码:
<div>First</div><div>Second</div><div>Third</div><div>Fourth</div>
jQuery 代码:
var arr = jQuery.makeArray(document.getElementsByTagName("div"));
结果:
Fourth
Third
Second
First


作用:将类数组对象转换为数组对象。使我们可以在数组和对象之间灵活的转换。

jQuery.trim(str)


作用
:这个大家应该很熟悉,就是去掉字符串起始和结尾的空格。

小结:在实际的开发中我们可能会用到其他的方法和属性,以上只是个人认为新手初学Jquery时,必须掌握的一些方法。仅供大家学习的参考。有什么不对的高手指教。

Tags: jquery