Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Umda

Kukho umda onjalo kwi-LinkedIn - Umda wokusetyenziswa kwezorhwebo. Kunokwenzeka kakhulu ukuba, njengam kude kube mva nje, awukaze udibane okanye uve ngayo.

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Undoqo womda kukuba usebenzisa ukukhangela abantu abangaphandle kwabafowunelwa rhoqo (akukho metrics ngokuthe ngqo, i-algorithm ithatha isigqibo ngokusekwe kwizenzo zakho - ukuba ukhangele kangaphi kwaye ungakanani, ukongeza abantu), emva koko isiphumo sokukhangela. ziyakuthintelwa kwiinkangeleko zenkangeleko ezintathu, endaweni ye-1000 (okungagqibekanga kwamaphepha ali-100, iiprofayili ezili-10 ngephepha ngalinye). Umda usetwa kwakhona ekuqaleni kwenyanga nganye. Ngokwendalo, Iiakhawunti zeprimiyamu azinawo lo mda.

Kodwa kungekudala, kwiprojekthi yesilwanyana, ndaqala ukudlala kakhulu nge-LinkedIn yokukhangela kwaye ngokukhawuleza ndafumana lo mda. Ngokwemvelo, andizange ndithande oku kakhulu, kuba andizange ndiyisebenzise nayiphi na injongo yezorhwebo, ngoko ke ingcamango yam yokuqala yayikukufunda umda kwaye ndizame ukujikeleza.

[Ingcaciso ebalulekileyo: izinto eziphathekayo kwinqaku zinikezelwa kuphela kwiinjongo zolwazi kunye nezemfundo. Umbhali akakhuthazi ukusetyenziswa kwabo ngeenjongo zorhwebo.]

Sifunda ingxaki

Sine: endaweni yeeprofayili ezilishumi ezinobumba, uphendlo lubuyisela ezintathu kuphela, emva koko ibhloko ene "recommendation" ye-akhawunti yeprimiyamu ifakiwe kwaye ngezantsi kukho iiprofayili ezifipheleyo nezingacofayo.

Ngoko nangoko, isandla sifikelela kumphuhlisi wekhonsoli ukuba ajonge ezi profayili zifihliweyo-mhlawumbi sinokususa ezinye izitayile ezingacacanga, okanye sikhuphe ulwazi kwibhloko kuphawulo. Kodwa, ngokulindelekileyo, ezi profayili zilungile imifanekiso yesibambi-ndawo kwaye akukho lwazi lugciniweyo.

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Kulungile, ngoku makhe sijonge iNethiwekhi isithuba kwaye sijonge ukuba ezinye iziphumo zophendlo ezibuyisela kuphela iiprofayile ezintathu ziyasebenza. Sifumana isicelo esinomdla kuso "/api/search/blended" kwaye sijonge impendulo.

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Iiprofayili ziza kuluhlu `lubandakanyiweyo, kodwa sele kukho amaziko angama-15 kulo mzekelo, ezintathu zokuqala zizinto ezinolwazi olongezelelweyo, into nganye iqulethe ulwazi kwiprofayili ethile (umzekelo, ingaba iprofayili iyiprimiyamu. ).

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

I-12 elandelayo ziiprofayili zokwenyani - iziphumo zophendlo, apho ezintathu kuphela ziya kuboniswa kuthi. Njengoko sele uqikelele, ibonisa kuphela abo bafumana ulwazi olongezelelweyo (izinto ezintathu zokuqala). Umzekelo, ukuba uthatha impendulo kwiprofayili ngaphandle komda, uya kufumana amaziko angama-28 - izinto ezili-10 ezongezelelweyo. ulwazi kunye neeprofayili ezili-18.

Phendula iprofayile ngaphandle komdaUkudlula umda wokukhangela we-LinkedIn ngokudlala nge-API
Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Kutheni iiprofayili ezingaphezulu kwe-10 zifika, nangona ziceliwe, kwaye azithathi nxaxheba kumboniso nangayiphi na indlela, nakwiphepha elilandelayo aziyi kuba - Andazi okwangoku. Ukuba uhlalutya i-URL yesicelo, unokubona ukubala=10 (zingaphi iiprofayili ezibuyiselwayo kwimpendulo, ubuninzi be-10).

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Ndingavuya ukufumana naziphi na izimvo ngalo mbandela.

Masizame

Kulungile, eyona nto ibalulekileyo ngoku siyazi ngokuqinisekileyo kukuba kukho iiprofayili ezininzi kwimpendulo kunokuba zisibonisa. Oku kuthetha ukuba sinokufumana idatha eninzi, nangona umda. Makhe sizame ukutsala i-API ngokwethu, ngokuthe ngqo kwi-console, sisebenzisa ukulandwa.

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Njengoko kulindelekile, sifumana impazamo, 403. Oku kungenxa yokhuseleko, apha asithumeli uphawu lwe-CSRF (CSRF kwiWikipedia. Ngamafutshane, ithokheni eyodwa yongezwa kwisicelo ngasinye, ekhangelwe kumncedisi wobunyani).

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Inokukhutshelwa kuso nasiphi na esinye isicelo esiphumeleleyo okanye kwiikuki, apho igcinwe kwindawo ethi 'JSESSIONID'.

Apho unokufumana khona umqondisoIsihloko sesinye isicelo:

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Okanye kwiikuki, ngokuthe ngqo kwi-console:

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Masizame kwakhona, ngeli xesha sigqithisa useto lokuzilanda, apho sichaza ithokheni yethu ye-csrf njengeparameter kwiheda.

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Impumelelo, sifumana zonke iiprofayili ezili-10. :tada:

Ngenxa yomahluko kwizihloko, ubume bempendulo buhluke kancinane kwinto efunyenwe kwisicelo sokuqala. Ungafumana isakhiwo esifanayo ukuba wongeza 'Yamkela:' isicelo/vnd.linkedin.normalized+json+2.1' kwinto yethu, ecaleni kophawu lwecsrf.
Umzekelo impendulo enesihloko esongezelelweyoUkudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Okungakumbi malunga nesihloko esithi Yamkela

Yintoni elandelayo?

Emva koko ungahlela (ngesandla okanye uzenzele) `ukuqala` iparamitha, yalathe kwisalathiso, ukuqala apho siyakunikwa iiprofayili ezili-10 (okwendalo = 0) kwisiphumo sonke sokukhangela. Ngamanye amazwi, ngokuyinyusa nge-10 emva kwesicelo ngasinye, sifumana imveliso eqhelekileyo yephepha-ngephepha, iiprofayili ezili-10 ngexesha.

Ngeli nqanaba ndinedatha eyaneleyo kunye nenkululeko yokuqhubeka nokusebenza kwiprojekthi yesilwanyana. Kodwa bekuya kuba sisono ukungazami ukubonisa le datha kanye kwindawo, ekubeni yayisele isesandleni. Asiyi kungena kwi-Ember, esetyenziswa ngaphambili. I-jQuery ibiqhagamshelwe kwindawo, kwaye emva kokumba ulwazi lwesiseko se-syntax kwimemori, unokwenza oku kulandelayo kwimizuzu embalwa.

ikhowudi yejQuery

/* Ρ€Π΅Π½Π΄Π΅Ρ€ Π±Π»ΠΎΠΊΠ°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ профиля ΠΈ вставляСм Π±Π»ΠΎΠΊ Π² список ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти Π΄Π°Π½Π½Ρ‹Π΅ */
const  createProfileBlock = ({ headline, publicIdentifier, subline, title }) => {
    $('.search-results__list').append(
        `<li class="search-result search-result__occluded-item ember-view">
            <div class="search-entity search-result search-result--person search-result--occlusion-enabled ember-view">
                <div class="search-result__wrapper">
                    <div class="search-result__image-wrapper">
                        <a class="search-result__result-link ember-view" href="/xh/in/${publicIdentifier}/">
                            <figure class="search-result__image">
                                <div class="ivm-image-view-model ember-view">
                                    <img class="lazy-image ivm-view-attr__img--centered EntityPhoto-circle-4  presence-entity__image EntityPhoto-circle-4 loaded" src="http://www.userlogos.org/files/logos/give/Habrahabr3.png" />
                                </div>
                            </figure>
                        </a>
                    </div>
                    
                    <div class="search-result__info pt3 pb4 ph0">
                        <a class="search-result__result-link ember-view" href="/xh/in/${publicIdentifier}/">
                            <h3 class="actor-name-with-distance search-result__title single-line-truncate ember-view">
                                ${title.text}
                            </h3>
                        </a>

                        <p class="subline-level-1 t-14 t-black t-normal search-result__truncate">${headline.text}</p>

                        <p class="subline-level-2 t-12 t-black--light t-normal search-result__truncate">${subline.text}</p>
                    </div>
                </div>
            </div>
        <li>`
    );
};

// Π΄Π΅Ρ€Π³Π°Π΅ΠΌ Π°ΠΏΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ
const fetchProfiles = () => {
    // Ρ‚ΠΎΠΊΠ΅Π½
   const csrf = 'ajax:9082932176494192209';
    
   // ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с настройками запроса, ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ‚ΠΎΠΊΠ΅Π½
   const settings = { headers: { 'csrf-token': csrf } }

    // ΡƒΡ€Π» запроса, с динамичСским индСксом старта Π² ΠΊΠΎΠ½Ρ†Π΅
   const url = `https://www.linkedin.com/voyager/api/search/blended?count=10&filters=List(geoRegion-%3Ejp%3A0,network-%3ES,resultType-%3EPEOPLE)&origin=FACETED_SEARCH&q=all&queryContext=List(spellCorrectionEnabled-%3Etrue,relatedSearchesEnabled-%3Etrue)&start=${nextItemIndex}`; 
    /* Π΄Π΅Π»Π°Π΅ΠΌ запрос, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ профиля Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€ Π±Π»ΠΎΠΊΠ°, ΠΈ послС ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ стартовый индСкс Π½Π° 10 */
    fetch(url, settings).then(response => response.json()).then(data => {
        data.elements[0].elements.forEach(createProfileBlock);
        nextItemIndex += 10;
});
};


// удаляСм всС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ ΠΈΠ· списка
$('.search-results__list').find('li').remove();
// вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ
$('.search-results__list').after('<button id="load-more">Load More</button>');
// добавляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ
$('#load-more').addClass('artdeco-button').on('click', fetchProfiles);

// ставим ΠΏΠΎ умолчания индСкс профиля для запроса
window.nextItemIndex = 0;

Ukuba wenza oku ngokuthe ngqo kwikhonsoli kwiphepha lokukhangela, iyakongeza iqhosha elilayisha iiprofayili ezintsha ezili-10 ngonqakrazo ngalunye kwaye lizinike kuluhlu. Ewe kunjalo, tshintsha ithokheni kunye ne-URL kweyona ifunekayo ngaphambi kokwenza oku. Ibhloko yeprofayile iya kuqulatha igama, indawo, indawo, ikhonkco kwiprofayile kunye nomfanekiso wesibambi.

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

isiphelo

Ngaloo ndlela, ngomgudu omncinci, sakwazi ukufumana indawo ebuthathaka kwaye saphinda sakhangela ngaphandle kwemiqathango. Kwakwanele ukuhlalutya idatha kunye nendlela yayo, jonga kwisicelo ngokwayo.

Andikwazi ukuthetha ukuba le yingxaki enkulu kwi-LinkedIn, kuba ayifaki nayiphi na isongelo. Ubuninzi bulahlekile inzuzo ngenxa ye "workarounds" ezinjalo, ezikuvumela ukuba ugweme ukuhlawula i-premium. Mhlawumbi impendulo enjalo yomncedisi iyimfuneko ekusebenzeni okuchanekileyo kwezinye iindawo zesayithi, okanye nje ubuvila babaphuhlisi kunye nokungabikho kwemithombo engavumeli ukuba yenziwe kakuhle. (Isithintelo sivele ngoJanuwari 2015; ngaphambi koku kwakungekho mda).

PS

Ngokwendalo, ikhowudi yejQuery ngumzekelo wakudala wezakhono. Okwangoku ndenze ulwandiso lwebhrawuza ukuze luhambelane neemfuno zam. Yongeza amaqhosha okulawula kwaye inika iiprofayili ezipheleleyo kunye nemifanekiso, iqhosha lesimemo kunye noqhagamshelwano ngokubanzi. Ngaphezu koko, iqokelela ngamandla izihluzi zeendawo, iinkampani, kunye nezinye izinto, kwaye ifumana ithokheni kwiikuki. Ngoko ke akukho mfuneko yokuba hardcode nantoni na kwakhona. Ewe, yongeza iindawo zoseto ezongezelelweyo, elithi "zingaphi iiprofayili onokuzicela ngexesha, ukuya kuthi ga kwi-49."

Ukudlula umda wokukhangela we-LinkedIn ngokudlala nge-API

Ndisasebenza kolu longezelelo kwaye ndiceba ukulukhuphela eluntwini. Bhala ukuba unomdla.

umthombo: www.habr.com

Yongeza izimvo