Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Limit

Gen yon limit konsa sou LinkedIn - Limit itilizasyon komèsyal yo. Li trè posib ke ou menm, tankou mwen jiska dènyèman, pa janm rankontre oswa tande pale de li.

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Sans nan limit la se ke si ou itilize rechèch la pou moun ki deyò kontak ou yo twò souvan (pa gen okenn mezi egzak, algorithm la deside ki baze sou aksyon ou - konbyen fwa ak konbyen lajan ou te fouye, te ajoute moun), Lè sa a, rezilta rechèch la. pral limite a twa pwofil, olye pou yo 1000 (defo 100 paj, 10 pwofil pou chak paj). Limit la reset nan kòmansman chak mwa. Natirèlman, kont prim pa gen limit sa a.

Men, pa gen lontan, pou yon pwojè bèt kay, mwen te kòmanse jwe anpil ak rechèch LinkedIn epi toudenkou te resevwa limit sa a. Natirèlman, mwen pa t renmen sa a anpil, paske mwen pa t 'sèvi ak li pou okenn rezon komèsyal, kidonk premye panse mwen se te etidye limitasyon an epi eseye jwenn alantou li.

[Yon klarifikasyon enpòtan: materyèl yo nan atik la yo prezante sèlman pou rezon enfòmasyon ak edikasyon. Otè a pa ankouraje itilizasyon yo pou rezon komèsyal yo.]

Nou ap etidye pwoblèm nan

Nou genyen: olye pou yo dis pwofil ak paginasyon, rechèch la retounen sèlman twa, apre yo fin mete yon blòk ak yon "rekòmandasyon" nan yon kont prim epi anba a se pwofil twoub ak ki pa klike sou.

Imedyatman, men an rive nan konsole pwomotè a pou gade pwofil kache sa yo - petèt nou ka retire kèk estil flou, oswa ekstrè enfòmasyon ki soti nan yon blòk nan markeup la. Men, byen espere, pwofil sa yo se jis foto anplasman epi pa gen okenn enfòmasyon ki estoke.

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Oke, kounye a ann gade nan onglet Rezo a epi tcheke si rezilta rechèch altènatif yo ki retounen sèlman twa pwofil yo aktyèlman ap travay. Nou jwenn demann nou enterese nan pou "/api/search/blended" epi gade repons lan.

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Pwofil yo vini nan yon etalaj "enkli", men deja gen 15 antite ladan l. Nan ka sa a, twa premye nan yo se objè ki gen enfòmasyon adisyonèl, chak objè gen enfòmasyon sou yon pwofil espesifik (pa egzanp, si wi ou non pwofil la se prim. ).

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Pwochen 12 yo se pwofil reyèl - rezilta rechèch, nan ki sèlman twa yo pral montre nou. Kòm ou ka deja devine, li montre sèlman moun ki resevwa plis enfòmasyon (twa premye objè yo). Pou egzanp, si ou pran repons lan nan yon pwofil san yon limit, ou pral resevwa 28 antite - 10 objè ak adisyonèl. enfòmasyon ak 18 pwofil.

Reponn pou pwofil san limitBypasse limit rechèch LinkedIn la lè w jwe ak API a
Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Poukisa plis pase 10 pwofil rive, byenke egzakteman 10 yo mande, epi yo pa patisipe nan ekspozisyon an nan okenn fason, menm nan pwochen paj la yo pa pral - mwen pa konnen ankò. Si ou analize URL demann lan, ou ka wè konte a = 10 (konbyen pwofil yo retounen nan repons lan, maksimòm 49).

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Mwen ta kontan resevwa nenpòt kòmantè sou zafè sa a.

Ann fè eksperyans

Oke, bagay ki pi enpòtan nou kounye a konnen pou asire w se ke gen plis pwofil nan repons lan pase yo montre nou. Sa vle di nou ka jwenn plis done, malgre limit la. Ann eseye rale API a tèt nou, dirèkteman nan konsole a, lè l sèvi avèk chache.

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Kòm espere, nou jwenn yon erè, 403. Sa a se akòz sekirite, isit la nou pa voye yon siy CSRF (CSRF sou Wikipedya. Nan yon Nutshell, yo ajoute yon siy inik nan chak demann, ki tcheke sou sèvè a pou otantisite).

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Li ka kopye nan nenpòt lòt demann ki gen siksè oswa nan bonbon, kote li estoke nan jaden 'JSESSIONID' la.

Ki kote yo jwenn siy laTèt yon lòt demann:

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Oswa nan bonbon, dirèkteman atravè konsole a:

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Ann eseye ankò, fwa sa a nou pase anviwònman yo chache, nan ki nou presize csrf-token nou an kòm yon paramèt nan header la.

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Siksè, nou resevwa tout 10 pwofil yo. :tada:

Akòz diferans ki genyen nan headers, estrikti repons lan se yon ti kras diferan de sa yo resevwa nan demann orijinal la. Ou ka jwenn menm estrikti a si ou ajoute 'Aksepte: 'application/vnd.linkedin.normalized+json+2.1' nan objè nou an, akote siy csrf la.
Egzanp repons ak header te ajouteBypasse limit rechèch LinkedIn la lè w jwe ak API a

Plis enfòmasyon sou aksepte header la

Ki sa ki nan pwochen?

Lè sa a, ou ka edite (manyèlman oswa otomatize) paramèt `kòmanse`, lonje dwèt sou endèks la, apati ki pral ba nou 10 pwofil (default = 0) nan rezilta rechèch la tout antye. Nan lòt mo, pa enkreman li pa 10 apre chak demann, nou jwenn pwodiksyon an nòmal paj-pa-paj, 10 pwofil nan yon moman.

Nan etap sa a mwen te gen ase done ak libète yo kontinye travay sou pwojè bèt kay la. Men, li ta yon peche pa eseye montre done sa yo dwa sou plas la, paske li te deja nan men yo. Nou pa pral antre nan Ember, ki itilize nan devan an. jQuery te konekte ak sit la, epi li te fouye konesans nan sentaks debaz nan memwa, ou ka kreye sa ki annapre yo nan yon koup de minit.

Kòd 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="/ht/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="/ht/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;

Si ou fè sa dirèkteman nan konsole a nan paj rechèch la, li pral ajoute yon bouton ki chaje 10 nouvo pwofil ak chak klike sou epi rann yo nan yon lis. Natirèlman, chanje siy la ak URL nan youn nan obligatwa anvan ou fè sa. Blòk pwofil la ap genyen non an, pozisyon, kote, lyen nan pwofil la ak yon imaj anplasman.

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Konklizyon

Kidonk, ak yon minimòm de efò, nou te kapab jwenn pwen fèb la epi reprann rechèch nou an san restriksyon. Li te ase yo analize done yo ak chemen li yo, gade nan demann nan tèt li.

Mwen pa ka di ke sa a se yon pwoblèm grav pou LinkedIn, paske li pa poze okenn menas. Maksimòm lan pèdi pwofi akòz "solusyon" sa yo, ki pèmèt ou evite peye pou prim. Petèt tankou yon repons sèvè nesesè pou operasyon an kòrèk nan lòt pati nan sit la, oswa li se tou senpleman parès nan devlopè yo ak yon mank de resous ki pa pèmèt li yo dwe fè byen. (Limitasyon an te parèt nan mwa janvye 2015; anvan sa a pa te gen okenn limit).

PS

Natirèlman, kòd la jQuery se yon egzanp olye primitif nan kapasite yo. Nan moman sa a mwen te kreye yon ekstansyon navigatè pou satisfè bezwen mwen yo. Li ajoute bouton kontwòl ak rann pwofil konplè ak foto, yon bouton envitasyon ak koneksyon jeneral. Anplis de sa, li dinamik kolekte filtè pou kote, konpayi, ak lòt bagay, epi rekipere yon siy nan bonbon. Se konsa, pa gen okenn nesesite pou hardcode anyen ankò. Oke, li ajoute jaden anviwònman adisyonèl, a la "konbyen pwofil yo mande nan yon moman, jiska 49."

Bypasse limit rechèch LinkedIn la lè w jwe ak API a

Mwen toujou ap travay sou adisyon sa a epi mwen planifye pou lage li bay piblik la. Ekri si w enterese.

Sous: www.habr.com

Add nouvo kòmantè