Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Kikomo

Kuna kizuizi kama hicho kwenye LinkedIn - Kikomo cha matumizi ya kibiashara. Kuna uwezekano mkubwa kwamba wewe, kama mimi hadi hivi majuzi, haujawahi kukutana nayo au kusikia.

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Kiini cha kikomo ni kwamba ikiwa unatumia utaftaji wa watu nje ya anwani mara nyingi sana (hakuna vipimo kamili, algoriti huamua kulingana na vitendo vyako - mara ngapi na kiasi gani ulitafuta, ongeza watu), kisha matokeo ya utaftaji. itapunguzwa kwa wasifu tatu, badala ya 1000 ( kurasa 100 chaguo-msingi, wasifu 10 kwa kila ukurasa). Kikomo kinawekwa upya mwanzoni mwa kila mwezi. Kwa kawaida, akaunti za malipo hazina kikomo hiki.

Lakini si muda mrefu uliopita, kwa mradi wa pet, nilianza kucheza sana na utafutaji wa LinkedIn na ghafla nikapata upungufu huu. Kwa kawaida, sikuipenda hii sana, kwa sababu sikuitumia kwa madhumuni yoyote ya kibiashara, kwa hivyo mawazo yangu ya kwanza ilikuwa kusoma kizuizi na kujaribu kuzunguka.

[Ufafanuzi muhimu: nyenzo katika makala zinawasilishwa tu kwa madhumuni ya habari na elimu. Mwandishi hahimiza matumizi yao kwa madhumuni ya kibiashara.]

Tunasoma shida

Tunayo: badala ya profaili kumi zilizo na utaftaji, utaftaji unarudisha tatu tu, baada ya hapo kizuizi kilicho na "mapendekezo" ya akaunti ya malipo huingizwa na chini ni wasifu usio wazi na usio na kubofya.

Mara moja, mkono unafika kwa kiweko cha msanidi kutazama wasifu huu uliofichwa - labda tunaweza kuondoa mitindo fulani ya ukungu, au kutoa maelezo kutoka kwa kizuizi kwenye lebo. Lakini, inavyotarajiwa, wasifu huu ni sawa picha za kishika nafasi na hakuna habari iliyohifadhiwa.

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Sawa, sasa hebu tuangalie kichupo cha Mtandao na tuangalie kama matokeo mbadala ya utafutaji ambayo yanarudisha wasifu tatu pekee hufanya kazi. Tunapata ombi tunalovutiwa nalo la "/api/search/blended" na tutazame jibu.

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Profaili zinakuja katika safu ya `iliyojumuishwa`, lakini tayari kuna vyombo 15 ndani yake, vitu vitatu vya kwanza ni vitu vyenye maelezo ya ziada, kila kitu kina habari juu ya wasifu maalum (kwa mfano, ikiwa wasifu ni wa malipo. )

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

12 zifuatazo ni profaili halisi - matokeo ya utaftaji, ambayo matatu tu ndiyo yataonyeshwa kwetu. Kama unavyoweza kukisia, inaonyesha wale tu wanaopokea habari ya ziada (vitu vitatu vya kwanza). Kwa mfano, ikiwa unachukua jibu kutoka kwa wasifu bila kikomo, utapokea vyombo 28 - vitu 10 na ziada. habari na wasifu 18.

Jibu kwa wasifu bila kikomoKukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API
Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Kwa nini wasifu zaidi ya 10 hufika, ingawa 10 haswa zimeombwa, na hazishiriki katika onyesho kwa njia yoyote, hata kwenye ukurasa unaofuata hazitakuwa - sijui bado. Ukichanganua URL ya ombi, unaweza kuona hiyo count=10 (ni wasifu ngapi wa kurejesha katika jibu, upeo wa 49).

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Ningefurahi kupokea maoni yoyote juu ya suala hili.

Hebu tufanye majaribio

Sawa, jambo muhimu zaidi tunalojua kwa hakika ni kwamba kuna wasifu zaidi katika jibu kuliko zinavyotuonyesha. Hii inamaanisha kuwa tunaweza kupata data zaidi, licha ya kikomo. Wacha tujaribu kuvuta API wenyewe, moja kwa moja kutoka kwa koni, kwa kutumia kuchota.

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Kama inavyotarajiwa, tunapata hitilafu, 403. Hii ni kwa sababu ya usalama, hapa hatutumi ishara ya CSRF (CSRF kwenye Wikipedia. Kwa kifupi, ishara ya kipekee huongezwa kwa kila ombi, ambayo huangaliwa kwenye seva kwa uhalisi).

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Inaweza kunakiliwa kutoka kwa ombi lingine lolote lililofaulu au kutoka kwa vidakuzi, ambapo imehifadhiwa katika sehemu ya 'JSESSIONID'.

Mahali pa kupata isharaKichwa cha ombi lingine:

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Au kutoka kwa vidakuzi, moja kwa moja kupitia koni:

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Wacha tujaribu tena, wakati huu tunapitisha mipangilio ya kuchukua, ambayo tunabainisha ishara yetu ya csrf kama kigezo kwenye kichwa.

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Imefaulu, tunapokea wasifu wote 10. :tada:

Kutokana na tofauti katika vichwa, muundo wa majibu ni tofauti kidogo na yale yaliyopokelewa katika ombi la awali. Unaweza kupata muundo sawa ikiwa utaongeza 'Kubali: 'application/vnd.linkedin.normalized+json+2.1' kwa kifaa chetu, karibu na tokeni ya csrf.
Mfano wa jibu na kichwa kilichoongezwaKukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Zaidi kuhusu kichwa cha Kubali

Nini hapo?

Kisha unaweza kuhariri (kwa mikono au kugeuza otomatiki) parameta ya `kuanza`, ikielekeza kwenye faharasa, kuanzia ambayo tutapewa wasifu 10 (chaguo-msingi = 0) kutoka kwa matokeo yote ya utafutaji. Kwa maneno mengine, kwa kuiongeza kwa 10 baada ya kila ombi, tunapata pato la kawaida la ukurasa kwa ukurasa, wasifu 10 kwa wakati mmoja.

Katika hatua hii nilikuwa na data ya kutosha na uhuru wa kuendelea kufanya kazi kwenye mradi wa kipenzi. Lakini ingekuwa dhambi kutojaribu kuonyesha data hii papo hapo, kwani tayari ilikuwa tayari. Hatutaingia kwenye Ember, ambayo hutumiwa mbele. jQuery iliunganishwa kwenye tovuti, na baada ya kuchimba maarifa ya sintaksia ya msingi kwenye kumbukumbu, unaweza kuunda yafuatayo katika dakika chache.

nambari ya 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="/sw/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="/sw/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;

Ukifanya hivi moja kwa moja kwenye dashibodi kwenye ukurasa wa utafutaji, itaongeza kitufe ambacho hupakia wasifu 10 mpya kwa kila mbofyo na kuzionyesha katika orodha. Kwa kweli, badilisha ishara na URL kuwa inayohitajika kabla ya kufanya hivi. Kizuizi cha wasifu kitakuwa na jina, nafasi, eneo, kiungo cha wasifu na picha ya kishikilia nafasi.

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Hitimisho

Hivyo, kwa uchache wa juhudi, tuliweza kupata doa dhaifu na kurejesha utafutaji wetu bila vikwazo. Ilitosha kuchambua data na njia yake, angalia ombi yenyewe.

Siwezi kusema kwamba hii ni tatizo kubwa kwa LinkedIn, kwa sababu haina tishio lolote. Upeo ni faida iliyopotea kwa sababu ya "kazi" kama hizo, ambayo hukuruhusu kuzuia kulipia malipo. Pengine majibu hayo kutoka kwa seva ni muhimu kwa uendeshaji sahihi wa sehemu nyingine za tovuti, au ni uvivu tu wa watengenezaji na ukosefu wa rasilimali ambayo hairuhusu kufanyika vizuri. (Kizuizi kilionekana Januari 2015; kabla ya hii hapakuwa na kikomo).

PS

Kwa kawaida, nambari ya jQuery ni mfano wa zamani wa uwezo. Kwa sasa nimeunda kiendelezi cha kivinjari ili kukidhi mahitaji yangu. Inaongeza vitufe vya kudhibiti na kutoa wasifu kamili na picha, kitufe cha mwaliko na miunganisho ya jumla. Pia, inakusanya vichujio vya biashara, kampuni na vitu vingine kwa nguvu, na kupata tokeni kutoka kwa vidakuzi. Hivyo hakuna haja ya hardcode kitu chochote tena. Kweli, inaongeza sehemu za mipangilio ya ziada, la "ni wasifu ngapi wa kuomba kwa wakati mmoja, hadi 49."

Kukwepa kikomo cha utafutaji cha LinkedIn kwa kucheza na API

Bado ninafanyia kazi nyongeza hii na ninapanga kuitoa kwa umma. Andika ikiwa una nia.

Chanzo: mapenzi.com

Kuongeza maoni