校内网狗狗刷骨机的java实现

上次为了图个方便,用ruby写了,貌似很多人不会ruby,那这次用ruby写了,而且上次要求知道狗狗的id,人的id和cookie,不是人人都会的,这次用java写的只需要输入用户名和密码就行 了。代码大部分参考了:http://hi.baidu.com/superyhao/blog/item/2ab2dd1626d19f1f962b43b4.html

 

注意! 我的思想是先刷狗粮,因为玩耍可以获得骨头,每当骨头超过5个了就去买狗粮,所以最好现将你的骨头花玩。当积累了很多的狗粮之后,我们可以通过喂别人挨饿的狗狗来赚取骨头了。

用法 :1.在main函数中将用户名和密码填上

         2.运行,得到狗粮

         3.狗粮很多了,将

 GouGou.earnFoods(pid, fid, cookie);
    //GouGou.earnBones(pid,fid,cookie);

变成

   //GouGou.earnFoods(pid, fid, cookie);
    GouGou.earnBones(pid,fid,cookie);

就行了。

 

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

public class GouGou {
private static String FLASHADDRESS="http://dog.xnimg.cn/dog/xn_swf/dogs_v0.14.swf";
private static String MD5_KEY="%$T&*jkhjksdhfjk$%^&*BJHhh";
private static String propsCont ="";
// 初始化的页面
public static String initPage( String pid, String fid, String cookie ) throws Exception {
	URL url = new URL("http://dog.xiaonei.com/pet-profile.do?method=dogXML&pid="+pid);//&t=1240806646390");//http://dog.xiaonei.com/pet-profile.do?method=dogXML&actor_id=" + fid + "&pid=" + pid );
   String method = "GET";
   String referer = FLASHADDRESS;
   HttpURLConnection conn = getConn( url, method, cookie, referer );
   return readContent( conn.getInputStream() );
}
// 玩耍
public static String playDog( String pid, String fid, String cookie, String key ) throws Exception {
   URL url = new URL("http://dog.xiaonei.com/pet-profile.do");
   String method = "POST";
   String referer = FLASHADDRESS;
   HttpURLConnection conn = getConn( url, method, cookie, referer );
  
   String code = key + "#" + pid + "#" + fid+"#"+MD5_KEY;
   writeContent( conn.getOutputStream(), "actor%5Fid=" + fid + "&method=pelt&code="
     + getMD5(code.getBytes()) + "&pid=" + pid );
  
   return readContent( conn.getInputStream() );
}

// 喂狗, type = 1 是喂食, 2是喂水
public static String feedDog( String pid, String fid, String cookie, String key, String type ) throws Exception {
   URL url = new URL("http://dog.xiaonei.com/pet-profile.do");
   String method = "POST";
   String referer = FLASHADDRESS;
   HttpURLConnection conn = getConn( url, method, cookie, referer );
  
   String code = key + "#"+ pid +"#" + fid+"#"+MD5_KEY;
   writeContent( conn.getOutputStream(), "actor%5Fid="+ fid +
     "&active%5Fid=" + type + "&method=doing&code=" + getMD5(code.getBytes()) + "&pid=" + pid );
  
   return readContent( conn.getInputStream() );
}

//进入商店,获取tsc
public static String getTsc( String cookie ) throws Exception {
   URL url = new URL( "http://dog.xiaonei.com/store.do?method=food" );
   String method = "GET";
   String referer = "http://i.static.xiaonei.com/pet/swf/dog_v3.swf?ver=081111c";
   HttpURLConnection conn = getConn( url, method, cookie, referer );
  
   String cont = readContent( conn.getInputStream() );
  String tsc=cont.substring(cont.indexOf("tsc:'")+5, cont.indexOf("',urlDog"));
  return tsc; 
}

// 买东西
public static void buySomething( String cookie) throws Exception {
   URL url = new URL("http://dog.xiaonei.com/store.do");
   String method = "POST";
   String referer = "http://dog.xiaonei.com/store.do?method=food";
   HttpURLConnection conn = getConn( url, method, cookie, referer );
  
   String cont = "method=buyfood&buy_id=1&buy_count=1&tsc=" + getTsc(cookie).trim();
   writeContent( conn.getOutputStream(), cont );
   String property=readContent( conn.getInputStream() );
   System.out.println("====buy 5 foods========");
   System.out.println(property);
   //printProps(property);
   conn.disconnect();
}

// 取得饥饿狗狗列表
public static Set<String> getHungryList( String cookie ) throws Exception {
   URL url = new URL( "http://dog.xiaonei.com/hall.do?method=hungry" );
   String method = "GET";
   String referer = FLASHADDRESS;
   HttpURLConnection conn = getConn( url, method, cookie, referer );
  
   String cont = readContent( conn.getInputStream() );
  
   Set<String> list = new HashSet<String>();
   Pattern pt = Pattern.compile( "[<]a[ ]href=[\"][/]pet-profile.do[?]pid=(.+?)[\"][>]" );
   Matcher mh = pt.matcher( cont );
  
   while( mh.find() )
    list.add( mh.group(1) );
  
   return list;
}

// 取得链接
private static HttpURLConnection getConn( URL url, String method, String cookie, String referer ) throws Exception {
   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   conn.setDoInput(true);
   conn.setDoOutput(true);
   conn.setRequestMethod(method);
   conn.addRequestProperty( "Cookie", cookie);
   conn.addRequestProperty("Accept", "*/*");
   conn.addRequestProperty("Accept-Language", "zh-CN");
   conn.addRequestProperty( "Referer", referer );
   conn.addRequestProperty("x-flash-version", "9,0,124,0");
 //  conn.setInstanceFollowRedirects(true);
   conn.connect();
  
   return conn;
}
public static String getCookie(String userName,String password)throws Exception {
	URL url=null;
	HttpURLConnection conn=null;
	url=new URL("http://login.xiaonei.com/Login.do");
	conn=(HttpURLConnection)url.openConnection();
	conn.setDoInput(true);
	conn.setDoOutput(true);
	conn.setRequestMethod("POST");
	conn.setRequestProperty("Host", "login.xiaonei.com");
	conn.setRequestProperty("User-Agent", "Internet Explorer");
	//conn.setRequestProperty("Cookie", cookie0);
	conn.setInstanceFollowRedirects(false);

	//conn.setRequestProperty("Cookie", cookie0);
	if(userName.contains("@"))
		userName.replace("@", "%40");
	String cont="email="+userName+"&password="+password+"&origURL=http%3A%2F%2Fwww.xiaonei.com%2FSysHome.do";
	
	writeContent( conn.getOutputStream(), cont );
	conn.connect();
	Map<String,List<String>> hm2=conn.getHeaderFields();
	List<String> cookieList2=hm2.get(new String("Set-Cookie"));
	Iterator it2=cookieList2.iterator();
	StringBuffer sb2=new StringBuffer("");
	while(it2.hasNext()){
		String str=(String)it2.next();
		String s=str.substring(0,str.indexOf("domain"));
		sb2.append(s);
	}
	String cookie=sb2.toString();
	System.out.println(cookie);
	//System.out.println("return is :"+readContent(conn.getInputStream()));
	conn.disconnect();
	return cookie;
}
private static String[] getIds(String userName,String password,String cookie) {
	URL url=null;
	HttpURLConnection conn=null;
	String[] strings=null;
	try{
	url=new URL("http://dog.xiaonei.com/pet-profile.do");
	conn=(HttpURLConnection)url.openConnection();
	conn.setDoInput(true);
	conn.setDoOutput(true);
	conn.setRequestMethod("GET");
	conn.setRequestProperty("Cookie", cookie);
	conn.connect();
	String cont=readContent(conn.getInputStream());
	
	Pattern pt = Pattern.compile( "PET.profile.init(.*)" );
	Matcher mh = pt.matcher(cont);  
	mh.find();
	strings=mh.group(1).split(",");
	}catch(Exception e){
		System.out.println("用户名或密码不正确!");
	}
    return strings;
}
public static String getFid(String userName,String password,String cookie){
	String fid="";
	try{
    fid=GouGou.getIds(userName, password,cookie)[1];
	}catch(Exception e){
		return "wrong";
	}
	return fid;
}

public static String getPid(String userName,String password,String cookie)throws Exception{
	String pid=GouGou.getIds(userName, password,cookie)[2];
	return pid;
}
private static void writeContent( OutputStream os, String content ) throws Exception {
   PrintWriter pw = new PrintWriter(os);
   pw.write( content );
   pw.flush();
   pw.close();
}

private static String readContent( InputStream is ) throws Exception {
   BufferedReader br = new BufferedReader(new InputStreamReader(is));
   String line = "";
   StringBuilder sb = new StringBuilder();
  
   while ((line = br.readLine()) != null)
    sb.append(line + "\n");
  
   br.close();
   return new String(sb.toString().getBytes(), "utf-8");
}

public static String getMD5(byte[] source) {
   String s = null;
   char hexDigits[] = { // 用来将字节转换成 16 进制表示的字符
     '0', '1', '2', '3', '4', '5', '6', '7',
     '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
   try {
    java.security.MessageDigest md =
     java.security.MessageDigest.getInstance("MD5");
    md.update(source);
    byte tmp[] = md.digest(); // MD5 的计算结果是一个 128 位的长整数,
    // 用字节表示就是 16 个字节
    char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,
    // 所以表示成 16 进制需要 32 个字符
    int k = 0; // 表示转换结果中对应的字符位置
    for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节
     // 转换成 16 进制字符的转换
     byte byte0 = tmp[i]; // 取第 i 个字节
     str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,
     // >>> 为逻辑右移,将符号位一起右移
     str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
    }
    s = new String(str); // 换后的结果转换为字符串

   } catch (Exception e) {
    e.printStackTrace();
   }
   return s;
}

private static String getInitKeyText( String str, String key ) throws Exception {
   SAXBuilder sb=new SAXBuilder();
  
   StringReader sr = new StringReader( str );
   InputSource isu = new InputSource( sr );
     Document doc=sb.build( isu ); //构造文档对象
     Element root=doc.getRootElement(); //获取根元素
    
     return root.getChild( key ).getText();
}
public static String getFoods() throws Exception
{
	return getPropKey( propsCont, "user_foods" ).toString();
}
public static String getBones() throws Exception
{
	return getPropKey( propsCont, "user_bones" ).toString();
}

private static String getPropKey( String str, String key ) throws Exception {
   SAXBuilder sb=new SAXBuilder();
   StringReader sr = new StringReader( str );
   InputSource isu = new InputSource( sr );
     Document doc=sb.build( isu ); //构造文档对象
     Element root=doc.getRootElement(); //获取根元素
    
     return root.getAttributeValue( key );
}

// 锻炼经验,增加狗粮方案
public static void earnFoods( String pid, String fid, String cookie ) throws Exception {
   //int forceNum = (int) (25 * Math.random()) + 20;
  // System.out.println( forceNum );
   String initCont = initPage( pid, fid, cookie );
 // System.out.print(initCont);
   String propsKey = getInitKeyText( initCont, "key" );
   Thread.sleep( (long)(Math.random() * 3) * 1000 );
  
   propsCont = playDog( pid, fid, cookie, propsKey );
   propsKey = getPropKey( propsCont, "key" );
   Thread.sleep( (long)(Math.random() * 3 + 3) * 1000 );
  
   while( true ) {
    double maxForce = Double.parseDouble( getPropKey( propsCont, "max_force" ) );
    double force = Double.parseDouble( getPropKey( propsCont, "force" ) );
    int bones = Integer.parseInt( getPropKey( propsCont, "user_bones" ) );
    String thirsty=getPropKey(propsCont,"is_pet_thirsty");
    if( bones >= 5 ) break;
    if(thirsty.equals("true"))
    {
    	propsCont = feedDog( pid, fid, cookie, propsKey, "2" );
        propsKey = getPropKey( propsCont, "key" );
        System.out.println( "============feed dog with water==========" );
    }
    if( force/maxForce<=0.8) {
     propsCont = feedDog( pid, fid, cookie, propsKey, "1" );
     propsKey = getPropKey( propsCont, "key" );
     System.out.println( "============feed dog with food==========" );
    } else {
     propsCont = playDog( pid, fid, cookie, propsKey );
     propsKey = getPropKey( propsCont, "key" );
     System.out.println( "============dog play==========" );
    }
    printProps( propsCont );
    Thread.sleep( (long)(Math.random() * 3 + 5) * 1000 );
   }
  
   buySomething( cookie );
  
   earnFoods( pid, fid, cookie );
}

// 增加爱心, 提高骨头
public static void earnBones( String pid, String fid, String cookie ) throws Exception {
   Set<String> set = getHungryList( cookie );
  
   for( String str : set ) {
    System.out.println( "for:" + str );
   
    String initCont = initPage( str, fid, cookie );
    String propsKey = getInitKeyText( initCont, "key" );
    Thread.sleep( 5000 );
   
    propsCont = feedDog( str, fid, cookie, propsKey, "2" );
    propsKey = getPropKey( propsCont, "key" );
    Thread.sleep( 5000 );
   
    propsCont = feedDog( str, fid, cookie, propsKey, "1" );
    printProps( propsCont );
    propsKey = getPropKey( propsCont, "key" );
   }
  
   earnBones(pid, fid, cookie);
}

private static void printProps( String cont ) throws Exception {
   System.out.println( "user_bones:" + getPropKey( cont, "user_bones" ) );
   System.out.println( "user_foods:" + getPropKey( cont, "user_foods" ) );
}


public static void main(String[] args) throws Exception {
    String userName="XXXX";
    String password="XXXX";
	String pid = ""; 
    String fid = ""; 
    String cookie=GouGou.getCookie(userName, password);
    fid=GouGou.getFid(userName, password,cookie).trim();
    if(fid.equals("wrong")){}
    else{
    pid=GouGou.getPid(userName,password,cookie).trim();
    System.out.println("pid:"+pid);
    System.out.println("fid:"+fid);
    System.out.println("tsc:"+GouGou.getTsc(cookie));
    GouGou.earnFoods(pid, fid, cookie);
    //GouGou.earnBones(pid,fid,cookie);
    }
}
}
/*返回的狗狗配置单示例
<data 
	get_bone="-1" 
	key="HNtql6ux1g" 
	user_bones="4" 
	user_foods="29" 
	expe="11.0" 
	level="0" 
	force="74" 
	max_force="100" 
	heart="38" 
	max_heart="100"
	charm="0" 
	is_force_available="true" 
	is_pet_thirsty ="false" 
	is_pet_hungry="false" 
	heart_level="1"
	heart_poke=""
	charm_level="0"
	>
</data>
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值