51job filter addr

filter 51job search result by distance

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey, Greasemonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

You will need to install an extension such as Tampermonkey to install this script.

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name       	51job filter addr
// @namespace   https://github.com/zhuzemin/51job_filter_addr
// @author      Zemin Zhu
// @description filter 51job search result by distance
// @include     https://search.51job.com/*
// @version     0.0.1
// @grant       GM_xmlhttpRequest
// @grant         GM_registerMenuCommand
// @grant         GM_setValue
// @grant         GM_getValue
// ==/UserScript==

/*Require: Firefox 45
Setting "Home point" & "Distance limit":
  Click on drop-down triangle next to the GreaseMonkey Icon
  "User Scripts Commands"...*/
  
/*  I'm looking for job right now, 
	my name is "Zemin Zhu", 28 year old, live in "Hangzhou",
	education is "elementary school", TRUE
	work experiense include: "primary mechanic", "vehicle supercharge tunner",
	skill little "Japanese", and "Programing",and "Autocad/Solidworks"
	most my "personal work" is about "hacker industry": 
	like massive login, burute account,
	and reverse few android app.
	if you got job or work for me ,please send email to me.
													[email protected]
															2018-6-3*/
	
"use strict";

// prepare UserPrefs
setUserPref(
    'homepoint',
    '0',
    'Set Home point',
    `Set "home point" with "Baidu map" point". Example: "39.122174, 117.215491"`
);

setUserPref(
    'distance',
    '6000',
    'Set Distance limit',
    'Set distance limit for how far from home.'
);
//addr column weight 
let cssContent = `	
		.dw_table .t3{
			width:200px
		}
	`
//modified	addr column weight	
addGlobalStyle(cssContent);
//homepoint
const HOMEPOINT = GM_getValue("homepoint");
//limit distance from home
const LIMIT = GM_getValue("distance");
//51job request info
class Job51 {
    constructor(jobid) {
        this.url = 'https://search.51job.com/jobsearch/bmap/map.php?jobid=' + jobid;
        this.jobid = jobid;
        this.charset = 'text/plain;charset=gbk';
    }
}
//baidu map request info
class Baidu {
    constructor(homepoint, lat, lng) {
        this.ak = "RGBBNuGoAcxvzl02ibOAxGZM";
        this.url = `https://api.map.baidu.com/direction/v2/riding?origin=${homepoint}&destination=${lat},${lng}&ak=${this.ak}`;
        this.charset = 'text/plain;charset=utf8';
    }
}
//resultList
var resultList = window.content.document.querySelector("#resultList");
//result array
var divs = resultList.querySelectorAll("div.el");
//main
for (var i = 1; i < divs.length; ++i) {
    //jobid
    let jobid = divs[i].querySelector("input.checkbox").getAttribute("value");
    //declare '51job' object
    let job51 = new Job51(jobid);
    //response object
    var ret = request(job51);
    //responseText
    let g_company = ret.responseText;
    //company info
    g_company = g_company.match(/\{.*\}/)[0];
    //edit to json string
    g_company = g_company.replace(/([\'\"])?([a-zA-Z0-9_]+)([\'\"])?:/g, '"$2": ');
    //convert to json
    g_company = JSON.parse(g_company);
    //company addr
    let address = g_company.address;
    //company lat
    var lat = g_company.lat;
    //company lng	
    var lng = g_company.lng;
    //company region
    let region = divs[i].querySelector("span.t3");
    //replace region with addr
    region.textContent = address;
    //if homepoint had set	
    if (HOMEPOINT != "0" || HOMEPOINT != "") {
        try {
            //declare 'baidu map' object
            let baidu = new Baidu(HOMEPOINT, lat, lng);
            //response object
            ret = request(baidu);
            //riding route
            let riding = JSON.parse(ret.responseText);
            //distance
            let distance = parseInt(riding.result.routes[0].distance);
            //if big then 'LIMIT'
            if (distance > LIMIT && distance < 100000) {
                //remove the row of the company
                resultList.removeChild(divs[i]);
            }
        } catch (err) {
            console.log(err.message);
            continue;
        }
    }
}
//request function, return response object
function request(object) {
    //GM api
    return GM_xmlhttpRequest({
        method: 'GET',
        url: object.url,
        headers: {
            'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
            'Accept': 'application/atom+xml,application/xml,text/xml',
            'Referer': 'https://search.51job.com/jobsearch/bmap/map.php?jobid=102801929',
        },
        overrideMimeType: object.charset,
        synchronous: true
    });
}
//string 2 dom object
function createElementFromHTML(htmlString) {
    var div = window.content.document.createElement('div');
    div.innerHTML = htmlString.trim();

    // Change this to div.childNodes to support multiple top-level nodes
    return div.firstChild;
}
//add css
function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) {
        return;
    }

    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}
// setting User Preferences
function setUserPref(varName, defaultVal, menuText, promtText) {
    GM_registerMenuCommand(menuText, function() {
        var val = prompt(promtText, GM_getValue(varName, defaultVal));
        // end execution if clicked CANCEL
        if (val === null) {
            return;
        }
        GM_setValue(varName, val);
    });
}