Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Utlanan

Adunay ingon nga limitasyon sa LinkedIn - Limitado sa komersyal nga paggamit. Lagmit kaayo nga ikaw, sama kanako hangtod karon, wala pa makasugat o nakadungog bahin niini.

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Ang esensya sa limitasyon mao nga kung kanunay nimo gigamit ang pagpangita alang sa mga tawo sa gawas sa imong mga kontak (walay eksaktong sukatan, ang algorithm nagdesisyon base sa imong mga aksyon - kung unsa ka sagad ug kung unsa ka daghan ang imong gipangita, gidugang ang mga tawo), unya ang resulta sa pagpangita limitado sa tulo ka mga profile, imbes nga 1000 (default 100 ka panid, 10 ka profile matag panid). Ang limitasyon gi-reset sa sinugdanan sa matag bulan. Natural, Ang mga premium nga account wala niini nga limitasyon.

Apan dili pa lang dugay, alang sa usa ka proyekto sa binuhi, nagsugod ako sa pagdula og daghan sa pagpangita sa LinkedIn ug kalit nga nakuha kini nga limitasyon. Siyempre, dili kaayo ko ganahan niini, tungod kay wala ko kini gigamit alang sa bisan unsang komersyal nga katuyoan, mao nga ang una nakong gihunahuna mao ang pagtuon sa limitasyon ug pagsulay sa paglibot niini.

[Usa ka importante nga pagpatin-aw: ang mga materyales sa artikulo gipresentar lamang alang sa mga katuyoan sa impormasyon ug edukasyon. Ang tagsulat wala mag-awhag sa ilang paggamit alang sa komersyal nga katuyoan.]

Among gitun-an ang problema

Kami adunay: imbes nga napulo ka mga profile nga adunay pagination, ang pagpangita nagbalik lamang sa tulo, pagkahuman ang usa ka bloke nga adunay "rekomendasyon" sa usa ka premium nga account gisal-ut ug sa ubos ang mga hanap ug dili ma-klik nga mga profile.

Diha-diha dayon, ang kamot nakaabot sa developer console aron tan-awon kining mga tinago nga mga profile - tingali mahimo natong tangtangon ang pipila ka mga blurring nga mga estilo, o pagkuha sa impormasyon gikan sa usa ka block sa markup. Apan, gilauman nga, kini nga mga profile yano ra mga hulagway sa placeholder ug walay impormasyon nga gitipigan.

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Okay, karon atong tan-awon ang Network tab ug susihon kung ang alternatibong mga resulta sa pagpangita nga nagbalik lamang sa tulo ka mga profile tinuod nga nagtrabaho. Among nakit-an ang hangyo nga kami interesado alang sa "/api/search/blended" ug tan-awa ang tubag.

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Ang mga profile moabut sa usa ka array nga `kalakip`, apan adunay na 15 nga mga entidad sa kini nga kaso, ang una nga tulo niini mga butang nga adunay dugang nga kasayuran, ang matag butang adunay kasayuran sa usa ka piho nga profile (pananglitan, kung ang profile premium. ).

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Ang sunod nga 12 tinuod nga mga profile - mga resulta sa pagpangita, diin tulo ra ang ipakita kanamo. Sama sa imong natag-an, kini nagpakita lamang niadtong nakadawat og dugang nga impormasyon (ang unang tulo ka mga butang). Pananglitan, kung gikuha nimo ang tubag gikan sa usa ka profile nga wala’y limitasyon, makadawat ka 28 nga entidad - 10 nga mga butang nga adunay dugang. impormasyon ug 18 ka profile.

Tubag alang sa profile nga walay limitasyonPaglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API
Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Ngano nga labaw pa sa 10 nga mga profile ang moabut, bisan kung eksakto nga 10 ang gihangyo, ug wala sila moapil sa pagpakita sa bisan unsang paagi, bisan sa sunod nga panid dili sila - wala pa ako nahibal-an. Kung imong analisahon ang URL sa hangyo, imong makita kana nga ihap=10 (pila ka mga profile ang ibalik sa tubag, labing kadaghan nga 49).

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Malipay ako nga makadawat bisan unsang mga komento bahin niini nga butang.

Mag-eksperimento ta

Okay, ang labing hinungdanon nga butang nga nahibal-an na namon karon mao nga adunay daghang mga profile sa tubag kaysa gipakita nila kanamo. Kini nagpasabut nga makakuha kami daghang datos, bisan pa sa limitasyon. Atong sulayan nga ibira ang API sa atong kaugalingon, direkta gikan sa console, gamit ang fetch.

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Sama sa gipaabut, nakakuha kami usa ka sayup, 403. Kini tungod sa seguridad, dinhi wala kami magpadala usa ka token sa CSRF (CSRF sa Wikipedia. Sa laktod nga pagkasulti, usa ka talagsaon nga timaan ang gidugang sa matag hangyo, nga gisusi sa server alang sa pagkatinuod).

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Mahimo kining kopyahon gikan sa bisan unsa nga malampuson nga hangyo o gikan sa cookies, diin kini gitipigan sa 'JSESSIONID' field.

Asa makit-an ang tokenUlohan sa laing hangyo:

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

O gikan sa cookies, direkta pinaagi sa console:

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Atong sulayan pag-usab, niining higayona atong ipasa ang mga setting aron makuha, diin atong ipiho ang atong csrf-token isip parameter sa header.

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Kalampusan, nadawat namo ang tanang 10 ka profile. :tada:

Tungod sa kalainan sa mga ulohan, ang istruktura sa tubag gamay nga lahi sa nadawat sa orihinal nga hangyo. Makuha nimo ang parehas nga istruktura kung imong idugang ang 'Accept: 'application/vnd.linkedin.normalized+json+2.1' sa among butang, sunod sa csrf token.
Pananglitan nga tubag nga adunay dugang nga ulohanPaglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Dugang pa mahitungod sa Accept header

Unsay sunod?

Unya mahimo nimong usbon (manual o awtomatiko) ang parameter nga `pagsugod`, nga nagpunting sa indeks, sugod diin hatagan kami og 10 ka mga profile (default = 0) gikan sa tibuuk nga resulta sa pagpangita. Sa laing pagkasulti, pinaagi sa pagdugang niini sa 10 pagkahuman sa matag hangyo, makuha namon ang naandan nga panid-sa-panid nga output, 10 nga mga profile matag higayon.

Niini nga yugto ako adunay igo nga datos ug kagawasan sa pagpadayon sa pagtrabaho sa proyekto sa binuhi. Apan kini usa ka sala nga dili mosulay sa pagpakita niini nga datos diha-diha dayon, tungod kay kini anaa na. Dili kami moadto sa Ember, nga gigamit sa atubangan. Ang jQuery konektado sa site, ug sa pagkalot sa kahibalo sa batakang syntax sa memorya, mahimo nimong buhaton ang mosunod sa pipila ka minuto.

jQuery code

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

Kung buhaton nimo kini direkta sa console sa panid sa pagpangita, magdugang kini usa ka buton nga nag-load sa 10 ka bag-ong mga profile sa matag pag-klik ug i-render kini sa usa ka lista. Siyempre, usba ang token ug URL sa gikinahanglan sa dili pa kini buhaton. Ang profile block maglangkob sa ngalan, posisyon, lokasyon, link sa profile ug usa ka imahe sa placeholder.

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

konklusyon

Sa ingon, uban ang labing gamay nga paningkamot, nakit-an namon ang huyang nga lugar ug nabawi ang among pagpangita nga wala’y mga pagdili. Igo na ang pag-analisar sa datos ug ang agianan niini, tan-awa ang hangyo mismo.

Dili ko makaingon nga kini usa ka seryoso nga problema alang sa LinkedIn, tungod kay wala kini hulga. Ang labing taas nga nawala nga ganansya tungod sa ingon nga "mga workaround", nga nagtugot kanimo sa paglikay sa pagbayad alang sa premium. Tingali ang ingon nga tubag gikan sa server gikinahanglan alang sa husto nga operasyon sa ubang mga bahin sa site, o kini yano nga pagkatapulan sa mga nag-develop ug usa ka kakulang sa mga kahinguhaan nga wala magtugot nga kini mahimo’g maayo. (Ang pagdili nagpakita sa Enero 2015; sa wala pa kini walay limitasyon).

PS

Natural, ang jQuery code kay usa ka primitive nga pananglitan sa mga kapabilidad. Sa pagkakaron nakamugna ko og extension sa browser nga mohaum sa akong mga panginahanglan. Nagdugang kini og mga buton sa pagkontrol ug naghatag og bug-os nga mga profile nga adunay mga hulagway, usa ka buton sa imbitasyon ug mga kinatibuk-ang koneksyon. Dugang pa, kini dinamikong nagkolekta sa mga pagsala alang sa mga lokasyon, kompanya, ug uban pang mga butang, ug nagkuha usa ka token gikan sa cookies. Mao nga dili na kinahanglan nga mag-hardcode bisan unsa. Aw, kini nagdugang dugang nga mga natad sa mga setting, usa ka "pila ka mga profile ang hangyoon sa usa ka higayon, hangtod sa 49."

Paglapas sa limitasyon sa pagpangita sa LinkedIn pinaagi sa pagdula sa API

Nagtrabaho pa ako niini nga pagdugang ug nagplano nga ipagawas kini sa publiko. Isulat kung interesado ka.

Source: www.habr.com

Idugang sa usa ka comment