API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Limit

LinkedIn-də belə bir məhdudiyyət var - Kommersiya istifadə limiti. Çox güman ki, siz də mənim kimi bu yaxınlara qədər onunla heç vaxt qarşılaşmamısınız və eşitməmisiniz.

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Məhdudiyyətin mahiyyəti ondan ibarətdir ki, əgər siz kontaktlarınızdan kənar adamlar üçün axtarışdan çox istifadə edirsinizsə (dəqiq ölçülər yoxdur, alqoritm hərəkətlərinizə əsasən qərar verir - nə qədər tez-tez və nə qədər axtarış etdiniz, adam əlavə etdiniz), onda axtarış nəticəsi 1000 əvəzinə üç profillə məhdudlaşdırılacaq (standart 100 səhifə, hər səhifədə 10 profil). Limit hər ayın əvvəlində sıfırlanır. Təbii ki, premium hesablarda bu məhdudiyyət yoxdur.

Ancaq çox keçməmiş bir ev heyvanı layihəsi üçün LinkedIn axtarışı ilə çox oynamağa başladım və birdən bu məhdudiyyəti aldım. Təbii ki, bu mənim çox xoşuma gəlmədi, çünki heç bir kommersiya məqsədləri üçün istifadə etməmişdim, ona görə də ilk fikrim məhdudiyyəti öyrənmək və ondan keçməyə çalışmaq oldu.

[Əhəmiyyətli bir aydınlıq: məqalədəki materiallar yalnız məlumat və təhsil məqsədləri üçün təqdim olunur. Müəllif onların kommersiya məqsədləri üçün istifadəsini təşviq etmir.]

Problemi öyrənirik

Bizdə var: səhifələmə ilə on profil əvəzinə axtarış yalnız üçü qaytarır, bundan sonra mükafat hesabının "tövsiyəsi" olan blok daxil edilir və aşağıda bulanıq və klikləməyən profillər var.

Dərhal əl bu gizli profillərə baxmaq üçün tərtibatçı konsoluna uzanır - bəlkə biz bəzi bulanıq üslubları silə və ya işarələmədəki blokdan məlumat çıxara bilərik. Ancaq gözlənildiyi kimi, bu profillər yalnızdır yer tutucu şəkillər və heç bir məlumat saxlanılmır.

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Yaxşı, indi Şəbəkə sekmesine baxaq və yalnız üç profili qaytaran alternativ axtarış nəticələrinin həqiqətən işlədiyini yoxlayaq. Bizi “/api/search/blended” üçün maraqlandıran sorğunu tapırıq və cavaba baxırıq.

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Profillər `daxil edilmiş` massivdə olur, lakin orada 15 obyekt var. ).

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Növbəti 12 real profildir - axtarış nəticələri, onlardan yalnız üçü bizə göstəriləcək. Artıq təxmin edə bildiyiniz kimi, yalnız əlavə məlumat alanları göstərir (ilk üç obyekt). Məsələn, limitsiz bir profildən cavab alsanız, 28 obyekt - əlavə ilə 10 obyekt alacaqsınız. məlumat və 18 profil.

Profilə limitsiz cavab verinAPI ilə oynayaraq LinkedIn-in axtarış limitini aşmaq
API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Niyə 10-dan çox profil gəlir, baxmayaraq ki, tam olaraq 10-u tələb olunur və onlar heç bir şəkildə nümayişdə iştirak etmirlər, hətta növbəti səhifədə belə olmayacaqlar - hələ bilmirəm. Sorğunun URL-ni təhlil etsəniz, bunun sayı=10 olduğunu görə bilərsiniz (cavabda neçə profilin qaytarılacağını, maksimum 49).

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Bu məsələ ilə bağlı hər hansı şərh almaqdan məmnun olaram.

Təcrübə edək

Tamam, indi dəqiq bildiyimiz ən vacib şey cavabda bizə göstərdiklərindən daha çox profilin olmasıdır. Bu o deməkdir ki, biz limitə baxmayaraq daha çox məlumat əldə edə bilərik. Gəlin API-ni özümüz birbaşa konsoldan götürməyə çalışaq.

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Gözlənildiyi kimi, 403 xətası alırıq. Bu təhlükəsizliklə bağlıdır, burada biz CSRF nişanı göndərmirik (Vikipediyada CSRF. Bir sözlə, hər sorğuya serverdə orijinallığı yoxlanılan unikal işarə əlavə olunur).

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

O, istənilən digər uğurlu sorğudan və ya 'JSESSIONID' sahəsində saxlanılan kukilərdən kopyalana bilər.

Tokeni haradan tapmaq olarBaşqa sorğunun başlığı:

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Və ya kukilərdən birbaşa konsol vasitəsilə:

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Yenidən cəhd edək, bu dəfə biz csrf-tokenimizi başlıqda parametr kimi təyin etdiyimiz parametrləri gətirmək üçün keçirik.

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Uğur, biz 10 profilin hamısını alırıq. :tada:

Başlıqlardakı fərqə görə cavabın strukturu ilkin sorğuda alınandan bir qədər fərqlidir. Csrf işarəsinin yanında obyektimizə 'Accept: 'application/vnd.linkedin.normalized+json+2.1' əlavə etsəniz, eyni quruluşu əldə edə bilərsiniz.
Əlavə başlıq ilə nümunə cavabAPI ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Qəbul başlığı haqqında ətraflı

Növbəti nədir?

Sonra indeksə işarə edərək `start` parametrini redaktə edə (əllə və ya avtomatlaşdıra bilərsiniz), ondan başlayaraq bizə bütün axtarış nəticəsindən 10 profil (defolt = 0) veriləcəkdir. Başqa sözlə desək, hər sorğudan sonra onu 10 artıraraq, hər dəfə 10 profil olan adi səhifə-səhifə çıxışını əldə edirik.

Bu mərhələdə pet layihəsi üzərində işləməyə davam etmək üçün kifayət qədər məlumatım və azadlığım var idi. Ancaq bu məlumatları yerində göstərməyə çalışmamaq günah olardı, çünki onlar artıq əlində idi. Cəbhədə istifadə olunan Emberə girməyəcəyik. jQuery sayta qoşuldu və yaddaşda əsas sintaksis biliklərini əldə etdikdən sonra bir neçə dəqiqə ərzində aşağıdakıları yarada bilərsiniz.

jQuery kodu

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

Bunu birbaşa axtarış səhifəsində konsolda etsəniz, o, hər kliklə 10 yeni profil yükləyən və onları siyahıda göstərən bir düymə əlavə edəcək. Əlbəttə ki, bunu etməzdən əvvəl işarəni və URL-i tələb olunana dəyişdirin. Profil blokunda ad, mövqe, yer, profilə keçid və yer tutucu şəkli olacaq.

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Nəticə

Beləliklə, minimum səylə zəif yeri tapa bildik və məhdudiyyətsiz axtarışımızı bərpa etdik. Məlumatları və onun yolunu təhlil etmək, sorğunun özünə baxmaq kifayət idi.

Bunun LinkedIn üçün ciddi problem olduğunu deyə bilmərəm, çünki bu, heç bir təhlükə yaratmır. Maksimum, mükafat ödəməkdən yayınmağa imkan verən bu cür "çözümlər" səbəbindən itirilmiş qazancdır. Ola bilsin ki, belə bir server cavabı saytın digər hissələrinin düzgün işləməsi üçün lazımdır və ya sadəcə tərtibatçıların tənbəlliyi və onun yaxşı işlənməsinə imkan verməyən resursların olmamasıdır. (Məhdudiyyət 2015-ci ilin yanvarında ortaya çıxdı; bundan əvvəl heç bir məhdudiyyət yox idi).

PS

Təbii ki, jQuery kodu imkanların kifayət qədər primitiv nümunəsidir. Hal-hazırda ehtiyaclarıma uyğun bir brauzer uzantısı yaratmışam. O, idarəetmə düymələri əlavə edir və şəkillər, dəvət düyməsi və ümumi əlaqələrlə tam profillər təqdim edir. Üstəlik, o, dinamik olaraq məkanlar, şirkətlər və digər şeylər üçün filtrlər toplayır və kukilərdən nişan alır. Beləliklə, artıq heç bir şeyi kodlaşdırmağa ehtiyac yoxdur. Yaxşı, o, əlavə parametrlər sahələri əlavə edir, məsələn, "bir anda nə qədər profil tələb etmək, 49-a qədər."

API ilə oynayaraq LinkedIn-in axtarış limitini aşmaq

Mən hələ də bu əlavə üzərində işləyirəm və onu ictimaiyyətə təqdim etməyi planlaşdırıram. Maraqlanan varsa yazsin.

Mənbə: www.habr.com

Добавить комментарий