`
fortianwei
  • 浏览: 60913 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

校内网狗狗刷骨机的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>
*/
分享到:
评论

相关推荐

    java毕业设计校内网项目(源码)

    java毕业设计校内网项目(源码)java毕业设计校内网项目(源码)java毕业设计校内网项目(源码)java毕业设计校内网项目(源码)java毕业设计校内网项目(源码)java毕业设计校内网项目(源码)java毕业设计校内网...

    基于Java的校内社交网站设计与实现.pdf

    综上所述,基于Java的校内社交网站设计与实现是一个综合应用了多种技术和工具的项目,旨在为大学校园内的学生提供一个便捷的社交和学习平台。通过本项目的开发,学生能够更容易地进行学术交流和知识分享,从而促进了...

    校内网 API Java Client 包

    校内网 API Java Client 包

    java开发项目 (校内网项目)

    ### Java开发项目(校内网项目)知识点梳理 #### 一、项目背景与目标 - **项目背景**:随着互联网技术的发展以及高校信息化建设的深入,校内网作为连接师生的重要平台,在校园生活中扮演着越来越重要的角色。本...

    校内java api源文件

    校内xiaonei api java client 0.8源文件,由jad反编译得到。jar文件下载地址http://code.google.com/p/xiaonei-java-api/downloads/list

    java语言开发的校内网源码和文档

    java语言开发的校内网源码的文档,是学习项目开发的很好的案例!!!!

    Java校内兼职管理系统的设计与实现源码

    校内兼职管理系统的设计与实现是通过Java语言和MySQL数据库来完成的。系统包括了前台模块和后台模块组成。前台模块中学生可以注册登录,学生登录成功后可以发布自己需要的代办业务,如去快递、买东西等业务,也可以...

    校内网 手机客户端 jar/jad

    标题 "校内网 手机客户端 jar/jad" 指的是一个专为手机用户设计的应用程序,允许用户通过移动设备访问校内网服务。这个客户端可能是Java应用程序(JAR文件)和Java应用描述文件(JAD文件)的形式,这两种格式在早期...

    校内跑腿业务&java&基于springboot校内跑腿业务系统设计与实现

    校内跑腿业务&java&基于springboot校内跑腿业务系统设计与实现

    校内网java client 0.8版

    校内官方发布的最新java client api包

    自己写的校内网博客发布机器人java代码

    自己写的校内网博客发布机器人java代码 自动在校内网博客发布文章 这是一个很简单的用于说明性质的代码,没有界面,你可以对它进行改进,例如从数据库读取文章内容等,以实现更强大的功能。

    校内网源代码

    1. **编程语言**:校内网源代码可能会使用如PHP、Java、Python等常见的Web开发语言,这些语言在构建大型网站时都有广泛应用。 2. **框架与库**:为了提高开发效率和系统稳定性,开发团队可能会使用如Spring Boot、...

    基于php实现的防校内网代码

    基于php实现的防校内网代码基于php实现的防校内网代码基于php实现的防校内网代码基于php实现的防校内网代码基于php实现的防校内网代码基于php实现的防校内网代码基于php实现的防校内网代码基于php实现的防校内网代码...

    Perl写的校内网刷人气代码

    在这个场景中,"Perl写的校内网刷人气代码"是一个利用Perl编写的程序,它的目标是自动化地访问校内网上的用户页面,以增加特定用户的访问量,从而达到刷人气的目的。这个过程通常称为网页爬虫或网络抓取。 首先,...

    基于Java实现的校内老刘拼车需求设计源码

    该项目为Java语言实现的校内老刘拼车需求设计源码,包含681个文件,包括252个XML配置文件、62个Java源文件、322个PNG图片文件、12个SO库文件、3个JAR包文件、4个Gradle文件、3个Git忽略文件、3个属性文件及少量其他...

    C#写的校内网自动发帖机

    总之,“C#写的校内网自动发帖机”展示了如何利用C#语言的网络功能和第三方库实现自动化的Web交互,这对于提升编程技能和理解Web自动化流程具有很高的价值。在实际开发中,开发者需要遵循平台规定,确保程序的合法性...

    校内网自动登录发帖程序源码

    【标题】"校内网自动登录发帖程序源码"涉及的是网络编程和自动化操作的领域,主要聚焦在C#和Java两种编程语言的应用。这个程序的目的是实现对"校内网"(可能是早期的社交网络平台,如人人网)的自动登录和发帖功能,...

    韩顺平校内网资料

    【标题】"韩顺平校内网资料"指的是由知名IT教育专家韩顺平教授提供的、与校内网络系统相关的教学资源。韩顺平教授在IT教育领域有着丰富的经验,他的课程涵盖了计算机科学的多个方向,包括网络技术、编程语言等。这个...

    校内网项目(基于SSH)

    在校内网项目中,Hibernate负责数据持久化,通过配置文件和注解,开发者可以轻松地实现对数据库的CRUD(创建、读取、更新、删除)操作,无需直接编写SQL语句。 4. **项目结构与功能**:一个基于SSH的校内网项目通常...

    基于SSH的校内网项目

    本项目“基于SSH的校内网项目”便是一个利用这三大框架实现的典型示例,旨在提供一个实际操作的环境,帮助开发者深入理解和掌握SSH框架的综合运用。 1. **Spring框架**:Spring是Java企业级应用的核心框架,它提供...

Global site tag (gtag.js) - Google Analytics