阿里地区比赛排名获取
阿里比赛排名获取
由上述网页源代码可以看出,整体是向http://102.alibaba.com/competition/addDiscovery/queryTotalRank.json这个页面以post方式提交了页号以及需要请求数据的数量,于是我就使用相同的操作,获取前2000名有关科大的排名。有时候不得不说大公司就是不一样,经过3天后,阿里竟然将服务端做了更改,每次只返回20条数据。也无所谓了,无非多个循环了。
这样就获取了所有的排名,从中过滤出科大的队伍,展示一下就可以了,如下:
好了,终于可以了,部署在自己的机器上,使用ssh反向隧道将自己的机器映射到服务器一个端口,现在就可以访问了,http://ali.androiddevelop.cn。最后为科大的这帮小伙伴们加油!!
最近阿里巴巴的大数据比赛(http://102.alibaba.com/competition/addDiscovery/index.htm)比较的火,实验室有好几组都参加了,但是阿里的结果是显示前500名的结果,查看十分的不方便,虽然可以登录进去查看自己的成绩,始终感觉不是太方便。阿里比赛排行榜页面(http://102.alibaba.com/competition/addDiscovery/totalRank.htm),查看源代码,发现数据获取方式如下:
pageObj.on("page:skip", function(e){ c_page=Number(e.pageNum); S.io({ type:'POST', url:'/competition/addDiscovery/queryTotalRank.json', data:{ 'pageIndex':c_page, 'pageSize':20 }, success:function(data){ $(".admin-all").removeAttr("checked"); var pageObj = new page({ container: "#page", // 容器 total_page: data.returnValue.totalPage, // 总页数 continuous_page: 3, // 连续显示分页数 current_page: c_page, // 当前页 first_page: true, // 首页 preview_show: true, // 是否显示第一页 next_show: true, // 是否显示下一页 last_show: true, // 最后一页 edge_page: 2, // 两端显示分页数 skip_show: true // 是否显示跳转 }); dataListFn(data.returnValue.datas); }, error:function(e){ alert("未请求到数据!"); }, dataType:'json' }); }); }, error:function(e){ alert("未请求到数据!"); }, dataType:'json' });
由上述网页源代码可以看出,整体是向http://102.alibaba.com/competition/addDiscovery/queryTotalRank.json这个页面以post方式提交了页号以及需要请求数据的数量,于是我就使用相同的操作,获取前2000名有关科大的排名。有时候不得不说大公司就是不一样,经过3天后,阿里竟然将服务端做了更改,每次只返回20条数据。也无所谓了,无非多个循环了。
主要代码如下:
package cn.edu.ustc.dm.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import cn.edu.ustc.dm.bean.AliTop; import cn.edu.ustc.dm.bean.Team; import com.google.gson.Gson; /** * 获取阿里科大排名 * @author Yuedong Li * */ public class RankInfo { private static List<Team> teams = new ArrayList<Team>(); private static long refreshTime = System.currentTimeMillis(); public static List<Team> getRank(int pageIndex) { String address = "http://102.alibaba.com/competition/addDiscovery/queryTotalRank.json"; try { HttpURLConnection conn = (HttpURLConnection) new URL(address) .openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.getOutputStream().write( ("pageIndex=" + pageIndex + "&&pageSize=20").getBytes()); BufferedReader buff = new BufferedReader(new InputStreamReader( conn.getInputStream())); String line; StringBuffer source = new StringBuffer(); while ((line = buff.readLine()) != null) { source.append(line); source.append('\n'); } Gson gson = new Gson(); AliTop aliTop = gson.fromJson(source.toString(), AliTop.class); List<Team> teams = aliTop.getReturnValue().getDatas(); return teams; } catch (IOException e) { e.printStackTrace(); } return new ArrayList<Team>(); } /** * 获取阿里前500排名 * @return */ public static List<Team> getAllRank() { long nowTime = System.currentTimeMillis(); if (teams.size() == 0 || nowTime - refreshTime >= 7200000) { refreshTime = nowTime; List<Team> teamTmp; for (int i = 1; i <= 25; i++) { teamTmp = getRank(i); for (int j = 0; j < teamTmp.size(); j++) teams.add(teamTmp.get(j)); } } return teams; } }
定义的一些bean如下:
package cn.edu.ustc.dm.bean; public class AliTop { private boolean isSuccess; private ReturnValue returnValue; public boolean isSuccess() { return isSuccess; } public void setSuccess(boolean isSuccess) { this.isSuccess = isSuccess; } public ReturnValue getReturnValue() { return returnValue; } public void setReturnValue(ReturnValue returnValue) { this.returnValue = returnValue; } }
package cn.edu.ustc.dm.bean; import java.util.List; public class ReturnValue { private int pageSize; private int pageIndex; private List<Team> datas; public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getPageIndex() { return pageIndex; } public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex; } public List<Team> getDatas() { return datas; } public void setDatas(List<Team> datas) { this.datas = datas; } }
package cn.edu.ustc.dm.bean; public class Team { private String id; private String date; private String university; private Double score; private Double precision; private Double recall; private String rank; private String teamName; private String dateString; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getUniversity() { return university; } public void setUniversity(String university) { this.university = university; } public Double getScore() { return score; } public void setScore(Double score) { this.score = score; } public Double getPrecision() { return precision; } public void setPrecision(Double precision) { this.precision = precision; } public Double getRecall() { return recall; } public void setRecall(Double recall) { this.recall = recall; } public String getRank() { return rank; } public void setRank(String rank) { this.rank = rank; } public String getTeamName() { return teamName; } public void setTeamName(String teamName) { this.teamName = teamName; } public String getDateString() { return dateString; } public void setDateString(String dateString) { this.dateString = dateString; } }
这样就获取了所有的排名,从中过滤出科大的队伍,展示一下就可以了,如下:
<%@page import="java.text.DecimalFormat"%> <%@page import="cn.edu.ustc.dm.util.*,cn.edu.ustc.dm.bean.*,java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>科大阿里排名</title> </head> <body> <center> <h2>科大阿里比赛排名</h2> <table width="90%" border="1"> <tr> <td align="center" style="color: green;">序号</td> <td align="center" style="color: green;">队名</td> <td align="center" style="color: green;">F1</td> <td align="center" style="color: green;">准确率</td> <td align="center" style="color: green;">召回率</td> <td align="center" style="color: green;">最优提交时间</td> <td align="center" style="color: green;">排名</td> </tr> <% DecimalFormat df = new DecimalFormat("##.000"); List<Team> teams = RankInfo.getAllRank(); int num = 0; for (int i = 0; i < teams.size(); i++) { Team team = teams.get(i); if (!team.getUniversity().equals("中国科学技术大学")) continue; if (num++ % 2 == 1) { %> <tr style="background-color: #eeeeee;"> <% } else { %> <tr> <% } %> <td align="center"><%=num%></td> <td align="center" style="color: red;"><%=team.getTeamName()%></td> <td align="center"><%=df.format(team.getScore()*100)%>%</td> <td align="center"><%=df.format(team.getPrecision()*100)%>%</td> <td align="center"><%=df.format(team.getRecall()*100)%>%</td> <td align="center"><%=team.getDateString()%></td> <td align="center" style="color: blue;"><%=team.getRank()%></td> </tr> <% } %> </table> <br> </center> </body> </html>
好了,终于可以了,部署在自己的机器上,使用ssh反向隧道将自己的机器映射到服务器一个端口,现在就可以访问了,http://ali.androiddevelop.cn。最后为科大的这帮小伙伴们加油!!