Bypassing LinkedIn's search limit nekutamba neiyo API

Ganhurira

Pane kudzikisira kwakadaro paLinkedIn - Muganho wekushandiswa kwekutengesa. Zvinonyanya kuitika kuti iwe, seni kusvika nguva pfupi yadarika, hauna kumbobvira wasangana nazvo kana kunzwa nezvazvo.

Bypassing LinkedIn's search limit nekutamba neiyo API

Izvo zvakakosha zvemuganho ndezvekuti kana iwe ukashandisa kutsvaga kwevasiri vaunosangana navo kakawanda (hapana chaiwo metrics, iyo algorithm inosarudza zvichibva pane zvaunoita - kangani uye zvakadii watsvaga, wakawedzera vanhu), ipapo mhedzisiro yekutsvaga. ichaganhurwa kumaprofiles matatu, pachinzvimbo che1000 ( default 100 mapeji, 10 profiles papeji). Muganhu unoiswa patsva pakutanga kwemwedzi wega wega. Sezvingatarisirwa, premium account haina ichi chinogumira.

Asi nguva pfupi yapfuura, yepurojekiti yemhuka, ndakatanga kutamba zvakanyanya neLinkedIn yekutsvaga uye ndakangoerekana ndawana muganhu uyu. Nomuzvarirwo, ini handina kufarira izvi zvakanyanya, nekuti ini handina kuishandisa kune chero chinangwa chekutengesa, saka pfungwa yangu yekutanga yaive yekudzidza iyo inogumira uye kuyedza kuitenderedza.

[Tsanangudzo yakakosha: zvinyorwa zviri muchinyorwa zvinoratidzwa chete nekuda kweruzivo uye zvekudzidzisa zvinangwa. Munyori haakurudzire kushandiswa kwavo kwezvinangwa zvekutengesa.]

Tiri kudzidza dambudziko

Tine: pachinzvimbo chegumi maprofayiri ane pagination, iyo yekutsvaga inodzoka matatu chete, mushure mezvo bhuroka rine "kurudziro" yeprimiyamu account inoiswa uye pazasi ine blurry uye isingabatike profiles.

Pakarepo, ruoko runosvika kune mugadziri wekoni kuti atarise aya akavanzika maprofile - pamwe tinogona kubvisa mamwe masitayipi ekufinyama, kana kubvisa ruzivo kubva mubhuroka mune markup. Asi, zvinonyatsotarisirwa, aya maprofile angori placeholder mifananidzo uye hapana ruzivo rwakachengetwa.

Bypassing LinkedIn's search limit nekutamba neiyo API

Zvakanaka, ikozvino ngatitarisei kune Network tab uye titarise kana imwe mhinduro yekutsvaga inodzosera maprofile matatu chete inoshanda. Isu tinowana chikumbiro chatinofarira che "/api/search/blended" uye tarisa mhinduro.

Bypassing LinkedIn's search limit nekutamba neiyo API

Maprofiles anouya mune `akasanganisirwa` array, asi atove nemasangano mairi 15. Muchiitiko ichi, matatu ekutanga acho zvinhu zvine rumwe ruzivo, chinhu chimwe nechimwe chine ruzivo pane chaiyo profil (semuenzaniso, kana iyo profil iri premium. )

Bypassing LinkedIn's search limit nekutamba neiyo API

Iwo gumi nemaviri anotevera maprofiles chaiwo - mitsva yekutsvaga, iyo mitatu chete icharatidzwa kwatiri. Sezvo iwe unogona kutofungidzira, inoratidza chete avo vanogamuchira rumwe ruzivo (zvinhu zvitatu zvekutanga). Semuenzaniso, kana iwe ukatora mhinduro kubva kuprofile pasina muganho, iwe unogashira 12 masangano - gumi zvinhu nekuwedzera. ruzivo uye 28 profiles.

Pindura chimiro pasina muganhuBypassing LinkedIn's search limit nekutamba neiyo API
Bypassing LinkedIn's search limit nekutamba neiyo API

Nei anopfuura gumi profiles achisvika, kunyangwe gumi chaiwo akakumbirwa, uye ivo vasingatore chikamu mukuratidzira nenzira ipi neipi, kunyangwe pane rinotevera peji havazove - ini handisati ndaziva. Kana iwe ukaongorora iyo URL yekukumbira, unogona kuona iyo count=10 (mangani maprofile ekudzoka mumhinduro, anodarika makumi mana nemapfumbamwe).

Bypassing LinkedIn's search limit nekutamba neiyo API

Ndingafara kugamuchira chero mhinduro panhau iyi.

Ngatiedzei

Zvakanaka, chinhu chinonyanya kukosha chatinoziva chokwadi ndechekuti kune mamwe maprofile mumhinduro pane yavanotiratidza. Izvi zvinoreva kuti tinogona kuwana data rakawanda, kunyangwe muganhu. Ngatiedzei kudhonza iyo API isu pachedu, zvakananga kubva kune iyo console, tichishandisa kutora.

Bypassing LinkedIn's search limit nekutamba neiyo API

Sezvinotarisirwa, tinowana kukanganisa, 403. Izvi zvinokonzerwa nekuchengeteka, pano isu hatisi kutumira chiratidzo cheCSRF (CSRF paWikipedia. Muchidimbu, chiratidzo chakasiyana chinowedzerwa kune chimwe nechimwe chikumbiro, icho chinotariswa pane sevha yechokwadi).

Bypassing LinkedIn's search limit nekutamba neiyo API

Inogona kukopwa kubva kune chero chimwe chikumbiro chakabudirira kana kubva kukiki, kwainochengetwa mundima ye 'JSESSIONID'.

Kwaungawane chiratidzoMusoro wechimwe chikumbiro:

Bypassing LinkedIn's search limit nekutamba neiyo API

Kana kubva kukiki, zvakananga kuburikidza nekoni:

Bypassing LinkedIn's search limit nekutamba neiyo API

Ngatiedzei zvakare, panguva ino tinopfuudza marongero ekutora, umo tinotsanangura yedu csrf-chiratidzo separameter mumusoro.

Bypassing LinkedIn's search limit nekutamba neiyo API

Kubudirira, tinogashira ese gumi profiles. :tada:

Nekuda kwekusiyana kwemisoro, chimiro chemhinduro chakati siyanei nezvakagamuchirwa muchikumbiro chekutanga. Unogona kuwana chimiro chimwe chete kana ukawedzera 'Gamuchira:'application/vnd.linkedin.normalized+json+2.1' kune chinhu chedu, padivi pe csrf tokeni.
Muenzaniso mhinduro ine musoro wakawedzerwaBypassing LinkedIn's search limit nekutamba neiyo API

Zvimwe nezve Bvuma musoro

Chii chinotevera?

Ipapo iwe unogona kugadzirisa (nemaoko kana automate) iyo `kutanga` parameter, inongedza kune index, kubva patichapihwa gumi profiles (default = 10) kubva pane yese yekutsvaga mhinduro. Mune mamwe mazwi, nekuiwedzera negumi mushure mekukumbira kwega kwega, tinowana yakajairika peji-ne-peji kuburitsa, gumi profiles panguva.

Panguva ino ndaive nedata yakakwana uye rusununguko rwekuenderera mberi nekushanda pachirongwa chepet. Asi chingadai chiri chivi kusaedza kuratidza iyi data ipapo ipapo, sezvo yaive yatovepo. Hatisi kuzopinda muEmber, iyo inoshandiswa kumberi. jQuery yaive yakabatana nesaiti, uye wachera kunze ruzivo rwekutanga syntax mundangariro, unogona kugadzira zvinotevera mumaminetsi akati wandei.

jQuery kodhi

/* Ρ€Π΅Π½Π΄Π΅Ρ€ Π±Π»ΠΎΠΊΠ°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ профиля ΠΈ вставляСм Π±Π»ΠΎΠΊ Π² список ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти Π΄Π°Π½Π½Ρ‹Π΅ */
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="/sn/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="/sn/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;

Kana iwe ukaita izvi zvakananga mukoni pane peji rekutsvaga, iyo inowedzera bhatani rinotakura gumi maprofiles nekudzvanya kwega kwega uye rinoapa mune rondedzero. Ehe, shandura chiratidzo uye URL kune inodiwa usati waita izvi. Iyo profil block ichave ine zita, chinzvimbo, nzvimbo, chinongedzo kune iyo mbiri uye mufananidzo wenzvimbo.

Bypassing LinkedIn's search limit nekutamba neiyo API

mhedziso

Nokudaro, nenhamburiko shomanene, takakwanisa kuwana nzvimbo isina kusimba ndokuwanazve kutsvaka kwedu pasina ganhuriro. Zvakanga zvakakwana kuongorora iyo data uye nzira yayo, tarisa muchikumbiro pachako.

Ini handigone kutaura kuti iri idambudziko rakakura reLinkedIn, nekuti harisi kutyisidzira. Iyo yakawanda yakarasika purofiti nekuda kwe "workaround" dzakadaro, izvo zvinokutendera kuti urege kubhadhara premium. Zvichida mhinduro yakadai sevhavha yakakosha pakushanda kwakarurama kwezvimwe zvikamu zvesaiti, kana kuti inongova usimbe hwevagadziri uye kushayikwa kwezvinhu zvisingabvumiri kuti zviitwe zvakanaka. (Muganho wakaonekwa muna Ndira 2015; izvi zvisati zvaitika pakanga pasina muganhu).

PS

Nomuzvarirwo, iyo jQuery kodhi muenzaniso wekare wekugona. Parizvino ndagadzira browser yekuwedzera kuti ikwane zvandinoda. Iyo inowedzera mabhatani ekudzora uye inopa yakazara maprofile nemifananidzo, bhatani rekukoka uye zvakabatana zvinongedzo. Uyezve, inounganidza zvine simba mafirita enzvimbo, makambani, uye zvimwe zvinhu, uye inotora chiratidzo kubva kukiki. Saka hapana chikonzero che hardcode chero chinhu zvakare. Zvakanaka, inowedzera mamwe masisitimu ekuwedzera, iyo "mangani maprofiles ekukumbira panguva, kusvika makumi mana nemapfumbamwe."

Bypassing LinkedIn's search limit nekutamba neiyo API

Ndichiri kushanda pakuwedzera uku uye ndinoronga kuiburitsa kune veruzhinji. Nyora kana uchifarira.

Source: www.habr.com

Voeg