Kuidas luua 30 minutiga lihtsat otsinguvõrgustikku

Korterijaht on ime, eriti Montrealis. See juhend näitab teile, kuidas luua robot, mis jääb teie jaoks jahi algusesse. Nii ei pea te kunagi oma otsinguid lõpmatult värskendama.

Kontekst

Erinevalt teistest linnadest on enamus Montrealis kortereid üürivaid inimesi samal üüriperioodil. Uued liisingud algavad juulis viimase 12 kuu jooksul ja lõppevad 30. juunil. Ehkki võiks väita, et see lihtsustab paljusid asju - näiteks kättesaadavust ja ootusi -, tähendab see ka, et konkurents on terav.

Iga päev ärkaksin, värskendaksin oma 10 avatud Kijiji lehte ja saadaksin meilisõnumeid kõigi uute reklaamide kohta. Ma teeksin seda uuesti lõuna ajal, õhtusöögil ja enne magamaminekut. Minu vastuste määr oli madal - palju alla 10%. Kui keegi vastas, oli nende vastus tavaliselt sünge.

Minu järgmine samm oli eelte üles seadmine ja tegelikult telefoni valimine. Helistamine muutis mu võimalusi pisut paremaks. Mõisnikud olid vastutulelikumad ja seekord oli mind tavaliselt vähem kui 10 inimest ees. Aga kindlasti ikka rohkem kui 5. Tagasi joonistuslaua juurde.

Ühel päeval kaebasin ühele töökaaslasele, et kogu korterihüüd sööb mind kogu aeg - see koitis mind. Kas ma saaksin selle probleemi oma arvutiga lahendada.

Koju jõudes kirjutasin väikese programmi, mis jälgib, kuidas Kijiji muudatusi otsib. Neid nähes saadab ta minu telefoni lühisõnumiteenuse (SMS) teksti koos asjakohase teabega. Ülejäänud see artikkel selgitab, kuidas ma seda tegin.

Märkus. Neile, kes õppematerjalist ei hooli, panin Kijiji kaabitsa siin avatud lähtekoodiga repo alla:

Pad-Patroli ehitamine

Töölt koju jõudes sain sülearvuti välja ja vallandasin oma terminali. Teadsin, et programm peaks olema kerge, kuna hakan seda ööpäevaringselt või vähemalt seni, kuni leian korteri. Otsustasin ehitada lihtsalt lihtsa sõlmeskripti, mida saaksin oma terminalist käivitada.

Seadistamine

Eeldusel, et teil on sõlme ja npm installitud, on mis tahes sõlmprojekti esimene samm npm initsialiseerimine projekti kataloogis.

Järgmisena loogem src kataloog, kus meie kood elab.

Tehke kataloogis thesrc kataloog index.js, kuhu meie skript läheb.

Saate seda teha nii:

$ npm init // see küsib paar küsimust
$ mkdir src
$ cd src && touch index.js

Skripti kirjutamine

Sooloprojekti tehes kipun ma vabastiilis asju lõhkuma ja seejärel kinnitama (vaieldamatult parim viis õppimiseks). Proovin jäljendada oma esialgset mõtteprotsessi järgmiste juhiste abil, kuid andke mulle teada, kui need tunduvad kõikjal kohapeal.

Esimene asi, mida peame tegema, on Kijijile edukas taotlus esitada. Sobiva vastuse saamiseks veenduge, et toome väga põhjalikult.

Selleks peame installima päringute teegi:

Installimistaotluse lubadus - npm dollarit

ja lisage seejärel index.js:

Kui see on salvestatud, saame käitada $ node src / index.js ja peaksime oma konsoolis nägema HTML-i märgistust. Esimene samm - lihtne!

Kuna me hoolime ainult siis, kui sisu muutub, laseme reageerimisel luua lihtsa räsi. Nii saame võrrelda reageeringut ja võrrelda räsi. Kui peame oma tulemused sisse logima, on see palju vähem koormav kui toores juurdehindlus.

Selleks võime kasutada räsimisriista, mida nimetatakse kontrollsummaks:

lõng $ lisage kontrollsumma

ja siis:

Ok lahe, see töötas! Meie 1500 HTML-i rida on kärbitud 32-kohaliseks. Mässime selle taaskasutatavasse funktsiooni:

Ülaltoodud kood loob tõmmatud väärtusest räsi. Järgmisel tõmbamisel võrdleb see algset ja uut räsi.

Kui nad on erinevad, siis vastab see tõele. See töötas suurepäraselt ... nagu natuke liiga hästi. Nagu näete, vastab see iga kord tõele

Pärast toomise vastuse täiendavat kontrollimist näeme, et Kijiji päises on ajatempel. See tähendab, et räsi on igal toomisel erinev. Oluline on märkida, et see oleks juhtunud ka pöörlevate reklaamide ja hunniku muu dünaamilise sisu tõttu.

Ülaltoodud järelevalvest eemaldudes peate alati hoolikalt kontrollima teie reageeringut, kui suhtlete API-ga, mida te veel ei kirjutanud.

See tähendab, et meil on vaja juurde pääseda märgistuse graanulitele, nii et installime vastuse sõelumiseks kolmanda osapoole paketi. Cheerio on raamatukogu, mis suudab neelata HTML-i märgistused ja muuta see juurdepääsetavaks JavaScripti API-ks. Selle eesmärk oli aidata jQuery arendajatel mitte kasutada jQuery, kuid kavatsused on ülehinnatud.

Meie jaoks saab see olema võlts Chrome'i arendaja tööriistade komplekt!

Cheerio sel viisil kasutamise eeltingimusena peame teadma, mida oma märgistuselt otsida. Lubage meil siis Chrome lahti teha ja vaadata meie URL-i.

Kui vaatame reklaame, näeme, et kõigil otsinguvastustel on klassid .otsing-üksus ja .regulaarne reklaam. Täiuslik!

Saame valida neid, kellel on Cheerio, näiteks järgmiselt:

Nii nagu me olime kavandanud, sülitab see hulgaliselt kenasti korraldatud esemeid. Cheerio dokumentatsiooni kohaselt on elemendi kõik atribuudid paigutatud võtmesse, mida nimetatakse atribuutideks. Kui läheme tagasi Chrome'i arendaja tööriistade juurde, näeme, et igal reklaamil on kordumatu andmeatribuut ID. Mõelgem sellele - asendage funktsiooni checkURL sees olev kood järgmisega:

rp (siteToCheck). seejärel (vastus => {
  const $ = co.load (HTMLresponse);
  lase apartmentString = "";
  // kasutage cheerio HTML-vastuse sõelumiseks ja kõigi otsingutulemuste leidmiseks
  $ (". search-item.regular-ad"). igaüks (i, element) => {
    console.log (element.attribs ["data-ad-id"]);
  });
});

Hea küll, me saame loendi unikaalsetest ID-numbritest. Need ID-d on lehel ainus teave, millest hoolime.

Lähme tagasi meie räsi võrdlemise esialgse plaani juurde, välja arvatud juhul, kui räsime ainult unikaalseid ID-sid:

Täiuslik! See töötab täpselt nii, nagu ette nähtud. Kui keegi postitab uue reklaami (või eemaldab vana reklaami, ID-de järjekorra jälgimise hoiatus), trükitakse meie konsoolis tõene. Meie SMS-tööriista seadistamiseks on vaja vaid üle vaadata.

Terminali SMS-i saatmine

See on tegelikult palju lihtsam kui tundub. Selleks kasutame kolmanda osapoole tarkvara nimega Twilio. See teeb palju, kuid selle üks põhifunktsioone on SMS-ide saatmine. Boonusena on sellel ka suurepärane JavaScripti API! Õpiku lõpetamiseks vajate ühte nende kontot - tasuta prooviperioodiks piisab, kui ümberringi mängida - ja võib-olla isegi uue korteri hankida.

Ok, nii et alustamiseks peame jooksma:

$ lõnga lisada twilio

sealt saab index.js-is lisada Twilio ja määratleda uue funktsiooni nimega SMS:

const twilio = nõuda (twilio);
// peate selle jaoks hankima oma mandaadi
const klient = uus Twilio ("accountID", "authKey");
funktsiooni SMS ({body, to, from}) {
  klient.sõnumid
    .loome ({
      keha,
      kuhu,
      alates
    })
    . seejärel (() => {
      console.log (`uccess Edu! Sõnum on saadetud aadressile $ {to}`);
    })
    .catch (err => {
      console.log (viga);
    });
}

See lihtne funktsioon võtab kaks telefoninumbrit (sisse ja tagasi) ja sõnumi (keha). Funktsiooni checkURL tulemuse konsoolilogimise asemel võime helistada SMS-iga mis tahes sõnumiga:

Seal sul see on! Iga kord, kui meie skript näeb muutust saidiribaside vahel, saadab see tekstsõnumi URL-iga otse teie telefoni .

Head jahti!

Tegelik skript, mille olen ehitanud, on pisut keerulisem kui ülaltoodud näide - olen selle üles pannud GitHubis avatud lähtekoodiga repos.

Lõpuks tahaksin teha sellele mõned täiendused - millest esimene muudab selle üldisemaks ja mitte ainult Kijiji kaabitsat. See on üsna lihtne, nii et see on suurepärane esmakordne projekt uutele kaastöölistele.

Panustage julgelt mis tahes viisil, mida teile sobib

Samuti, kui kellelgi tekkis huvi, sõlmisin eelmisel pühapäeval just üürilepingu. Korter, mille lõpuks üürisin, oli alates esimesest värskendusest, mida pad-patrull mulle saatis - see oli saatus

Töötan praegu Montreali luksusmoefirmas tarkvaraarendajana. Olen seda teinud umbes aasta pärast seda, kui olin eelmisel suvel lõpetanud veebi alglaadimislaagri. Veedan oma vaba aega uue tehnika õppimisel ja kuni paar päeva tagasi korterite jahti pidades.