Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Limitu

Hemm tali limitazzjoni fuq LinkedIn - Limitu ta' użu kummerċjali. Huwa estremament probabbli li int, bħali sa ftit ilu, qatt ma ltqajt magħha jew smajt biha.

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

L-essenza tal-limitu hija li jekk tuża t-tfittxija għal nies barra l-kuntatti tiegħek spiss wisq (m'hemm l-ebda metrika eżatta, l-algoritmu jiddeċiedi abbażi tal-azzjonijiet tiegħek - kemm ta 'spiss u kemm fittex, żidt nies), allura r-riżultat tat-tfittxija se jkun limitat għal tliet profili, minflok 1000 ( default 100 paġna, 10 profili għal kull paġna). Il-limitu huwa reset fil-bidu ta 'kull xahar. Naturalment, kontijiet premium m'għandhomx din il-limitazzjoni.

Imma mhux twil ilu, għal proġett ta 'annimali domestiċi, bdejt nilgħab ħafna bit-tfittxija ta' LinkedIn u f'daqqa waħda sibt din il-limitazzjoni. Naturalment, dan ma tantx għoġobni, għax ma użajtu għall-ebda skop kummerċjali, għalhekk l-ewwel ħsieb tiegħi kien li nistudja l-limitazzjoni u nipprova nħares.

[Kjarifika importanti: il-materjali fl-artiklu huma ppreżentati biss għal skopijiet informattivi u edukattivi. L-awtur ma jinkoraġġixxix l-użu tagħhom għal skopijiet kummerċjali.]

Qed nistudjaw il-problema

Għandna: minflok għaxar profili bil-paġnar, it-tfittxija tirritorna biss tlieta, u wara tiddaħħal blokka b'"rakkomandazzjoni" ta 'kont premium u hawn taħt huma profili mċajpra u li ma jistgħux jiġu kklikkjati.

Immedjatament, l-idejn jilħaq lill-console tal-iżviluppatur biex tħares lejn dawn il-profili moħbija - forsi nistgħu nneħħu xi stili ċajpir, jew niġbdu informazzjoni minn blokka fil-markup. Iżda, pjuttost mistenni, dawn il-profili huma biss stampi placeholder u l-ebda informazzjoni ma hija maħżuna.

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Tajjeb, issa ejja nħarsu lejn it-tab tan-Netwerk u ċċekkja jekk ir-riżultati tat-tfittxija alternattivi li jirritornaw biss tliet profili jaħdmux fil-fatt. Insibu t-talba li aħna interessati fiha għal “/api/search/blended” u nħarsu lejn ir-rispons.

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Il-profili jiġu f'firxa 'inkluża', iżda diġà hemm 15-il entità fiha F'dan il-każ, l-ewwel tlieta minnhom huma oġġetti b'informazzjoni addizzjonali, kull oġġett fih informazzjoni fuq profil speċifiku (pereżempju, jekk il-profil huwiex premium. ).

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

It-12 li jmiss huma profili reali - riżultati tat-tiftix, li minnhom tlieta biss se jintwerew lilna. Kif diġà tista 'raden, turi biss lil dawk li jirċievu informazzjoni addizzjonali (l-ewwel tliet oġġetti). Pereżempju, jekk tieħu t-tweġiba minn profil mingħajr limitu, tirċievi 28 entità - 10 oġġetti b'addizzjonali. informazzjoni u 18-il profil.

Tweġiba għall-profil mingħajr limituTaqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API
Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Għaliex jaslu aktar minn 10 profili, għalkemm huma mitluba eżattament 10, u ma jipparteċipawx fil-wirja bl-ebda mod, anke fil-paġna li jmiss ma jkunux - għadni ma nafx. Jekk tanalizza l-URL tat-talba, tista' tara dak l-għadd=10 (kemm-il profil trid tirritorna fit-tweġiba, massimu ta' 49).

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Inkun kuntent li nirċievi xi kummenti dwar din il-kwistjoni.

Ejja esperiment

Tajjeb, l-iktar ħaġa importanti li issa nafu żgur hija li hemm aktar profili fir-rispons milli juruna. Dan ifisser li nistgħu niksbu aktar data, minkejja l-limitu. Ejja nippruvaw niġbdu l-API aħna stess, direttament mill-console, billi tuża fetch.

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Kif mistenni, ikollna żball, 403. Dan huwa minħabba s-sigurtà, hawnhekk mhux qed nibagħtu token CSRF (CSRF fuq il-Wikipedija. Fil-qosor, token uniku huwa miżjud ma 'kull talba, li huwa ċċekkjat fuq is-server għall-awtentiċità).

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Tista' tiġi kkupjata minn kwalunkwe talba oħra ta' suċċess jew minn cookies, fejn tinħażen fil-qasam 'JSESSIONID'.

Fejn issib it-tokenKap ta' talba oħra:

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Jew mill-cookies, direttament permezz tal-console:

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Ejja erġgħu nippruvaw, din id-darba ngħaddu s-settings biex iġibu, li fihom nispeċifikaw is-csrf-token tagħna bħala parametru fl-header.

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Suċċess, nirċievu l-10 profili kollha. :tada:

Minħabba d-differenza fl-intestaturi, l-istruttura tar-rispons hija kemmxejn differenti minn dak li jasal fit-talba oriġinali. Tista' tikseb l-istess struttura jekk iżżid 'Aċċetta: 'application/vnd.linkedin.normalized+json+2.1' mal-oġġett tagħna, ħdejn it-token csrf.
Eżempju ta' tweġiba b'header miżjudTaqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Aktar dwar l-intestatura Aċċetta

Xi jmiss?

Imbagħad tista 'teditja (manwalment jew awtomat) il-parametru `bidu`, li tipponta lejn l-indiċi, li jibda minnu se ningħataw 10 profili (default = 0) mir-riżultat kollu tat-tfittxija. Fi kliem ieħor, billi nżiduha b'10 wara kull talba, niksbu l-output tas-soltu paġna b'paġna, 10 profili kull darba.

F'dan l-istadju kelli biżżejjed dejta u libertà biex inkompli naħdem fuq il-proġett tal-annimali domestiċi. Iżda kien ikun dnub li ma tipprovax turi din id-dejta eżatt fuq il-post, peress li kienet diġà disponibbli. Mhux se nidħlu Ember, li tintuża fuq quddiem. jQuery kien konness mas-sit, u wara li ħaffer l-għarfien tas-sintassi bażika fil-memorja, tista 'toħloq dan li ġej fi ftit minuti.

Kodiċi jQuery

/* рендер блока, принимаем данные профиля и вставляем блок в список профилей используя эти данные */
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="/mt/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="/mt/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;

Jekk tagħmel dan direttament fil-console fuq il-paġna tat-tfittxija, iżżid buttuna li tgħabbi 10 profili ġodda ma 'kull klikk u tirrendihom f'lista. Naturalment, ibdel it-token u l-URL għal dak meħtieġ qabel ma tagħmel dan. Il-blokka tal-profil se jkun fiha l-isem, il-pożizzjoni, il-post, il-link għall-profil u immaġni ta’ placeholder.

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Konklużjoni

Għalhekk, b'sforz minimu, stajna nsibu l-post dgħajjef u nerġgħu niksbu t-tfittxija tagħna mingħajr restrizzjonijiet. Kien biżżejjed li tanalizza d-dejta u t-triq tagħha, tħares lejn it-talba nnifisha.

Ma nistax ngħid li din hija problema serja għal LinkedIn, għax ma toħloq l-ebda theddida. Il-massimu huwa profitt mitluf minħabba tali "workarounds", li jippermettilek tevita li tħallas għall-primjum. Forsi tweġiba bħal din mis-server hija meħtieġa għall-operat korrett ta 'partijiet oħra tas-sit, jew hija sempliċement laziness tal-iżviluppaturi u nuqqas ta' riżorsi li ma jippermettix li jsir tajjeb. (Ir-restrizzjoni dehret f'Jannar 2015; qabel ma kien hemm l-ebda limitu).

PS

Naturalment, il-kodiċi jQuery huwa eżempju pjuttost primittiv tal-kapaċitajiet. Bħalissa ħloqt estensjoni tal-browser biex taqbel mal-bżonnijiet tiegħi. Hija żżid buttuni ta 'kontroll u tirrendi profili sħaħ bi stampi, buttuna ta' stedina u konnessjonijiet ġenerali. Barra minn hekk, jiġbor dinamikament filtri għal postijiet, kumpaniji, u affarijiet oħra, u jirkupra token mill-cookies. Allura m'hemmx bżonn ta 'hardcode xejn aktar. Ukoll, iżid oqsma ta 'settings addizzjonali, bħal "kemm profili għandek titlob kull darba, sa 49."

Taqbeż il-limitu tat-tfittxija ta' LinkedIn billi tilgħab bl-API

Għadni qed naħdem fuq din iż-żieda u nippjana li noħroġha lill-pubbliku. Ikteb jekk inti interessat.

Sors: www.habr.com

Żid kumment