Skip to content

Instantly share code, notes, and snippets.

@x3388638
Last active November 17, 2016 09:48
Show Gist options
  • Save x3388638/88605f6e9bc17118ecace43482c7ae8b to your computer and use it in GitHub Desktop.
Save x3388638/88605f6e9bc17118ecace43482c7ae8b to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name pkget crawler
// @namespace crawlPKGET
// @version 2.1
// @description Pokemon is over there.
// @author Y.Y.
// @match https://pkget.com/*
// @include https://pkget.com/*
// @grant none
// ==/UserScript==
var area = {
v2: 23.996804691767085, // fill in here (Max Lat)
v3: 121.00981001109164, // fill in here (Max Lng)
v4: 23.9246452826823, // fill in here (Min Lat)
v5: 120.91719869822543 // fill in here (Min Lng)
};
var _pkget = (() => {
const _bullshit = [10, 13, 16, 19, 21, 23, 41, 48];
var _queryInterval = 0;
var _pokemonList = {};
var _whiteList = [3, 4, 5, 6, 9, 25, 26, 28, 31, 34, 38, 40, 45, 51, 53, 57, 59, 62, 65, 67, 68, 71, 75, 76, 78, 81, 82, 86, 87, 89, 90, 91, 93, 94, 95, 97, 100, 101, 103, 105, 106, 107, 108, 110, 112, 113, 115, 117, 122, 124, 125, 128, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151]; // fill in here
var _telegramConfig = {
botApiKey: '', // fill in here
chat_id: '@chat_id' // fill in here
};
function start(area) {
console.log('START');
_queryInterval = setInterval(() => {
_getData(area)
.done((data) => {
var newPoke = data.fp;
for(let i = 0; i < newPoke.length; i++) {
var p = newPoke[i];
var pokeIndex = dec(p.a);
if(_bullshit.indexOf(pokeIndex) < 0 && _whiteList.indexOf(pokeIndex) >= 0) {
var exist = false;
if(!_pokemonList[pokeIndex]) {
_pokemonList[pokeIndex] = [];
}
for(let j = 0; j < _pokemonList[pokeIndex].length; j ++) {
if (_pokemonList[pokeIndex][j].b == newPoke[i].b &&
_pokemonList[pokeIndex][j].c == newPoke[i].c &&
_pokemonList[pokeIndex][j].d == newPoke[i].d) {
exist = true;
}
if(CheckMySec(parseInt(_pokemonList[pokeIndex][j].b) - 1e3 * parseInt(_pokemonList[pokeIndex][j].a)) <= 1) {
_pokemonList[pokeIndex].splice(j, 1);
j--;
}
}
if(!exist) {
_pokemonList[pokeIndex].push(newPoke[i]);
if(p && pokeIndex && (CheckMySec(parseInt(p.b) - 1e3 * parseInt(p.a)) > 1)) {
let pokeName = window.poke.poke[pokeIndex].zhtw;
let lat = +p.c;
let lng = +p.d;
let exp = _getHHMMSS(parseInt(p.b) - 1e3 * parseInt(p.a));
let rest = _getMMSS((parseInt(p.b) - 1e3 * parseInt(p.a)) - Date.now());
let moves = '';
let iv = '';
if(p.f != '^^^^^') {
let [atk, def, sta, m1, m2, v] = p.f.split('^');
moves = [getpkskByID(m1)[0].zhtw, getpkskByID(m2)[0].zhtw];
if(moves[0] && moves[1]) {
moves = `${moves[0]}/${moves[1]}`;
}
if(v) {
iv = `${parseInt(v)}%`;
}
}
if(pokeName && lat && lng && exp && rest) {
// telegram api
let title = `${pokeName} ${iv} ${moves}`;
let body = `剩餘 ${rest} 結束於 ${exp}`;
$.ajax({
url: `https://api.telegram.org/bot${_telegramConfig.botApiKey}/sendVenue`,
type: 'get',
dataType: 'json',
data: {
chat_id: _telegramConfig.chat_id,
latitude: lat,
longitude: lng,
title: title,
address: body
}
});
}
}
}
}
}
});
}, 10*1000);
}
function stop() {
console.log('STOP');
clearInterval(_queryInterval);
}
function getPokeList() {
return _pokemonList;
}
function _getData(area) {
var r = (64 * Math.random() + 1, 64 * Math.random() + 1, (new Date).Format("yyyy-MM-dd hh:mm:ss"));
var lat0 = area.v2
lng0 = area.v3,
lat1 = area.v4,
lng1 = area.v5;
var i = ed.Encrypt("" + lat0 + "^" + r),
a = ed.Encrypt("" + lng1 + "^" + tf);
i = encodeURIComponent(i),
a = encodeURIComponent(a);
url="fp.ashx?a=" + lat0 + "&b=" + lng0 + "&c=" + lat1 + "&d=" + lng1 + "&e=" + LimitItem + "&f=" + i + "&g=" + a + "&h=" + h + "&j=765";
return (
$.ajax({
url: url,
type: 'get'
})
);
}
function _getHHMMSS(time) {
var date = new Date(time);
var hours = date.getHours();
var minutes = "0" + date.getMinutes();
var seconds = "0" + date.getSeconds();
return hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
}
function _getMMSS(time) {
var date = new Date(time);
var minutes = date.getMinutes();
var seconds = "0" + date.getSeconds();
return minutes + ':' + seconds.substr(-2);
}
return {
start,
stop,
getPokeList
};
})();
var pokemonNames = []; pokemonNames[1] = "妙蛙種子", pokemonNames[2] = "妙蛙草", pokemonNames[3] = "妙蛙花", pokemonNames[4] = "小火龍", pokemonNames[5] = "火恐龍", pokemonNames[6] = "噴火龍", pokemonNames[7] = "傑尼龜", pokemonNames[8] = "卡咪龜", pokemonNames[9] = "水箭龜", pokemonNames[10] = "綠毛蟲", pokemonNames[11] = "鐵甲蛹", pokemonNames[12] = "巴大蝴", pokemonNames[13] = "獨角蟲", pokemonNames[14] = "鐵殼昆", pokemonNames[15] = "大針蜂", pokemonNames[16] = "波波", pokemonNames[17] = "比比鳥", pokemonNames[18] = "比雕", pokemonNames[19] = "小拉達", pokemonNames[20] = "拉達", pokemonNames[21] = "烈雀", pokemonNames[22] = "大嘴雀", pokemonNames[23] = "阿柏蛇", pokemonNames[24] = "阿柏怪", pokemonNames[25] = "皮卡丘", pokemonNames[26] = "雷丘", pokemonNames[27] = "穿山鼠", pokemonNames[28] = "穿山王", pokemonNames[29] = "尼多蘭", pokemonNames[30] = "尼多娜", pokemonNames[31] = "尼多后", pokemonNames[32] = "尼多朗", pokemonNames[33] = "尼多力諾", pokemonNames[34] = "尼多王", pokemonNames[35] = "皮皮", pokemonNames[36] = "皮可西", pokemonNames[37] = "六尾", pokemonNames[38] = "九尾", pokemonNames[39] = "胖丁", pokemonNames[40] = "胖可丁", pokemonNames[41] = "超音蝠", pokemonNames[42] = "大嘴蝠", pokemonNames[43] = "走路草", pokemonNames[44] = "臭臭花", pokemonNames[45] = "霸王花", pokemonNames[46] = "派拉斯", pokemonNames[47] = "派拉斯特", pokemonNames[48] = "毛球", pokemonNames[49] = "末入蛾", pokemonNames[50] = "地鼠", pokemonNames[51] = "三地鼠", pokemonNames[52] = "喵喵", pokemonNames[53] = "貓老大", pokemonNames[54] = "可達鴨", pokemonNames[55] = "哥達鴨", pokemonNames[56] = "猴怪", pokemonNames[57] = "火爆猴", pokemonNames[58] = "卡蒂狗", pokemonNames[59] = "風速狗", pokemonNames[60] = "蚊香蝌蚪", pokemonNames[61] = "蚊香蛙", pokemonNames[62] = "快泳蛙", pokemonNames[63] = "凱西", pokemonNames[64] = "勇吉拉", pokemonNames[65] = "胡地", pokemonNames[66] = "腕力", pokemonNames[67] = "豪力", pokemonNames[68] = "怪力", pokemonNames[69] = "喇叭芽", pokemonNames[70] = "口呆花", pokemonNames[71] = "大食花", pokemonNames[72] = "瑪瑙水母", pokemonNames[73] = "毒刺水母", pokemonNames[74] = "小拳石", pokemonNames[75] = "隆隆石", pokemonNames[76] = "隆隆岩", pokemonNames[77] = "小火馬", pokemonNames[78] = "烈焰馬", pokemonNames[79] = "呆呆獸", pokemonNames[80] = "呆河馬", pokemonNames[81] = "小磁怪", pokemonNames[82] = "三合一磁怪", pokemonNames[83] = "大蔥鴨", pokemonNames[84] = "嘟嘟", pokemonNames[85] = "嘟嘟利", pokemonNames[86] = "小海獅", pokemonNames[87] = "白海獅", pokemonNames[88] = "臭泥", pokemonNames[89] = "臭臭泥", pokemonNames[90] = "大舌貝", pokemonNames[91] = "鐵甲貝", pokemonNames[92] = "鬼斯", pokemonNames[93] = "鬼斯通"; pokemonNames[94] = "耿鬼"; pokemonNames[95] = "大岩蛇"; pokemonNames[96] = "素利普"; pokemonNames[97] = "素利拍"; pokemonNames[98] = "大鉗蟹"; pokemonNames[99] = "巨鉗蟹"; pokemonNames[100] = "雷電球"; pokemonNames[101] = "頑皮彈"; pokemonNames[102] = "蛋蛋"; pokemonNames[103] = "椰蛋樹"; pokemonNames[104] = "卡拉卡拉"; pokemonNames[105] = "嘎啦嘎啦"; pokemonNames[106] = "沙瓦郎"; pokemonNames[107] = "艾比郎"; pokemonNames[108] = "大舌頭"; pokemonNames[109] = "瓦斯彈"; pokemonNames[110] = "雙彈瓦斯"; pokemonNames[111] = "鐵甲犀牛"; pokemonNames[112] = "鐵甲暴龍"; pokemonNames[113] = "吉利蛋"; pokemonNames[114] = "蔓藤怪"; pokemonNames[115] = "袋龍"; pokemonNames[116] = "墨海馬"; pokemonNames[117] = "海刺龍"; pokemonNames[118] = "角金魚"; pokemonNames[119] = "金魚王"; pokemonNames[120] = "海星星"; pokemonNames[121] = "寶石海星"; pokemonNames[122] = "吸盤魔偶"; pokemonNames[123] = "飛天螳螂"; pokemonNames[124] = "迷唇姐"; pokemonNames[125] = "電擊獸"; pokemonNames[126] = "鴨嘴火龍"; pokemonNames[127] = "大甲"; pokemonNames[128] = "肯泰羅"; pokemonNames[129] = "鯉魚王"; pokemonNames[130] = "暴鯉龍"; pokemonNames[131] = "乘龍"; pokemonNames[132] = "百變怪"; pokemonNames[133] = "伊布"; pokemonNames[134] = "水精靈"; pokemonNames[135] = "雷精靈"; pokemonNames[136] = "火精靈"; pokemonNames[137] = "3D龍"; pokemonNames[138] = "菊石獸"; pokemonNames[139] = "多刺菊石獸"; pokemonNames[140] = "化石盔"; pokemonNames[141] = "鐮刀盔"; pokemonNames[142] = "化石翼龍"; pokemonNames[143] = "卡比獸"; pokemonNames[144] = "急凍鳥"; pokemonNames[145] = "閃電鳥"; pokemonNames[146] = "火焰鳥"; pokemonNames[147] = "迷你龍"; pokemonNames[148] = "哈克龍"; pokemonNames[149] = "快龍"; pokemonNames[150] = "超夢"; pokemonNames[151] = "夢幻";
// ui
$('.navbar, .text-wrap').remove();
$('#map').css({
'height': `${$(window).height()}px`
});
$(window).resize(function() {
$('#map').css({
'height': `${$(window).height()}px`
});
});
var $Form = $(
`<form>
<div class="form-group">
<input type="text" class="form-control" id="maxLat" placeholder="Max Lat" value="${area.v2}">
</div>
<div class="form-group">
<input type="text" class="form-control" id="maxLng" placeholder="Max Lng" value="${area.v3}">
</div>
<div class="form-group">
<input type="text" class="form-control" id="minLat" placeholder="Min Lat" value="${area.v4}">
</div>
<div class="form-group">
<input type="text" class="form-control" id="minLng" placeholder="Min Lng" value="${area.v5}">
</div>
<button type="button" class="btn btn-default btn-getL">GET LOCATION</button>
<button type="button" class="btn btn-default btn-start">START</button>
</form>`
);
$Form.css({
position: 'absolute',
top: '20px',
left: '20px',
'z-index': '10000',
background: 'rgba(0, 0, 0, 0.66)',
padding: '20px',
'border-radius': '5px'
});
$('body').append($Form);
$('.btn-getL').on('click', function() {
$('#maxLat').val(window.map.getBounds().getNorthEast().lat);
$('#minLat').val(window.map.getBounds().getSouthWest().lat);
$('#maxLng').val(window.map.getBounds().getNorthEast().lng);
$('#minLng').val(window.map.getBounds().getSouthWest().lng);
});
$('.btn-start').on('click', function() {
if($(this).hasClass('started')) {
$(this).text('START').removeClass('started');
_pkget.stop();
} else {
$(this).text('STOP').addClass('started');
_pkget.start({
v2: +$('#maxLat').val(),
v3: +$('#maxLng').val(),
v4: +$('#minLat').val(),
v5: +$('#minLng').val()
});
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment