Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Ҳадди

Дар LinkedIn чунин маҳдудият вуҷуд дорад - Маҳдудияти истифодаи тиҷоратӣ. Эҳтимол дорад, ки шумо, мисли ман, то ба наздикӣ, ҳеҷ гоҳ дар бораи он дучор нашудаед ва нашунидаед.

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Моҳияти маҳдудият дар он аст, ки агар шумо ҷустуҷӯи одамонро берун аз алоқаҳои худ хеле зуд истифода баред (ягон ченакҳои дақиқ вуҷуд надорад, алгоритм дар асоси амалҳои шумо қарор қабул мекунад - чанд вақт ва чӣ қадар шумо ҷустуҷӯ кардед, одамонро илова кардед), пас натиҷаи ҷустуҷӯ ба ҷои 1000 бо се профил маҳдуд хоҳад шуд (бо пешфарз 100 саҳифа, 10 профил дар як саҳифа). Лимит дар аввали ҳар моҳ аз нав барқарор карда мешавад. Табиист, ҳисобҳои мукофотӣ ин маҳдудият надоранд.

Аммо чанде пеш, барои лоиҳаи ҳайвонот, ман бо ҷустуҷӯи LinkedIn бисёр бозӣ карданро сар кардам ва ногаҳон ин маҳдудиятро пайдо кардам. Табиист, ки ин ба ман чандон писанд наомад, зеро ман онро бо ягон ҳадафи тиҷоратӣ истифода намебурдам, аз ин рӯ аввалин фикрам ин буд, ки маҳдудиятро омӯхтан ва кӯшиш кардан ба он буд.

[Тавзеҳи муҳим: маводҳо дар мақола танҳо барои мақсадҳои иттилоотӣ ва таълимӣ пешниҳод карда мешаванд. Муаллиф истифодаи онҳоро бо мақсадҳои тиҷоратӣ ташвиқ намекунад.]

Мо масъаларо меомӯзем

Мо дорем: ба ҷои даҳ профили дорои саҳифагузорӣ, ҷустуҷӯ танҳо се профилро бармегардонад, ки пас аз он блок бо "тавсия" -и ҳисоби мукофотӣ ворид карда мешавад ва дар зер профилҳои норавшан ва кликнашаванда мебошанд.

Дарҳол, даст ба консоли таҳиякунанда мерасад, то ин профилҳои пинҳоншударо бубинад - шояд мо метавонем баъзе сабкҳои норавшанро нест кунем ё маълумотро аз блоки аломатгузорӣ хориҷ кунем. Аммо, интизор меравад, ки ин профилҳо танҳоанд тасвирҳои ҷойнишин ва ҳеҷ гуна маълумот нигоҳ дошта намешавад.

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Хуб, ҳоло биёед ба ҷадвали шабака назар андозем ва тафтиш кунем, ки оё натиҷаҳои ҷустуҷӯи алтернативӣ, ки танҳо се профилро бармегардонанд, воқеан кор мекунанд. Мо дархостеро, ки ба мо манфиатдор аст, барои "/api/search/blended" пайдо мекунем ва ба посух назар мекунем.

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Профилҳо дар массиви "дохилшуда" меоянд, аммо дар он аллакай 15 объект мавҷуд аст, ки дар ин ҳолат сетои аввали онҳо объектҳои дорои маълумоти иловагӣ мебошанд, ҳар як объект дорои маълумот дар бораи профили мушаххас аст (масалан, оё профил премиум аст. ).

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

12-тои оянда профилҳои воқеӣ мебошанд - натиҷаҳои ҷустуҷӯ, ки танҳо сетои онҳо ба мо нишон дода мешаванд. Тавре ки шумо аллакай тахмин карда метавонед, он танҳо онҳоеро нишон медиҳад, ки маълумоти иловагӣ мегиранд (се объекти аввал). Масалан, агар шумо ҷавобро аз профил бе маҳдудият қабул кунед, шумо 28 объект - 10 объекти иловагӣ мегиред. маълумот ва 18 профил.

Ҷавоб барои профил бидуни маҳдудиятГузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API
Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Чаро зиёда аз 10 профилҳо меоянд, гарчанде ки маҳз 10 нафар дархост карда мешаванд ва онҳо ба ҳеҷ ваҷҳ дар намоиш иштирок намекунанд, ҳатто дар саҳифаи оянда онҳо нахоҳанд буд - ман ҳоло намедонам. Агар шумо URL-и дархостро таҳлил кунед, шумо метавонед онро бинед, ки шумора = 10 аст (чанд профилро дар посух баргардонед, ҳадди аксар 49).

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Ман хурсанд хоҳам буд, ки ҳар гуна шарҳҳоро дар ин бора гирам.

Биёед таҷриба кунем

Хуб, муҳимтарин чизе, ки мо ҳоло аниқ медонем, ин аст, ки дар посух назар ба он ки онҳо ба мо нишон медиҳанд, профилҳои бештар вуҷуд доранд. Ин маънои онро дорад, ки мо метавонем маълумоти бештарро ба даст орем, сарфи назар аз маҳдудият. Биёед кӯшиш кунем, ки API-ро худамон мустақиман аз консол бо истифода аз fetch кашем.

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Тавре ки интизор мерафт, мо хатогие мегирем, 403. Ин аз сабаби амният аст, мо дар ин ҷо аломати CSRF намефиристем (CSRF дар Википедиа. Хулоса, ба ҳар як дархост як аломати беназир илова карда мешавад, ки дар сервер барои ҳаққоният тафтиш карда мешавад).

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Он метавонад аз дигар дархостҳои муваффақ ё аз кукиҳо, ки дар майдони 'JSESSIONID' нигоҳ дошта мешавад, нусхабардорӣ карда шавад.

Токенро аз куҷо пайдо кардан мумкин астСарлавҳаи дархости дигар:

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Ё аз кукиҳо, мустақиман тавассути консол:

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Биёед бори дигар кӯшиш кунем, ин дафъа мо танзимотро барои гирифтан мегузаронем, ки дар он мо csrf-токени худро ҳамчун параметр дар сарлавҳа нишон медиҳем.

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Муваффақият, мо ҳама 10 профилро мегирем. :тада:

Аз сабаби фарқияти сарлавҳаҳо, сохтори ҷавоб аз он чизе, ки дар дархости аслӣ гирифта шудааст, каме фарқ мекунад. Шумо метавонед ҳамон сохторро ба даст оред, агар шумо ба объекти мо, дар паҳлӯи аломати csrf 'Қабул: 'application/vnd.linkedin.normalized+json+2.1' илова кунед.
Намунаи посух бо сарлавҳаи иловашудаГузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Бештар дар бораи сарлавҳаи Қабул

Чӣ оянда аст?

Пас шумо метавонед параметри `start`-ро бо ишора ба индекс таҳрир кунед (дастӣ ё автоматӣ кунед), ки аз он ба мо аз тамоми натиҷаи ҷустуҷӯ 10 профил (пешфарз = 0) дода мешавад. Ба ибораи дигар, пас аз ҳар як дархост 10 зиёд кардани он, мо натиҷаи муқаррарии саҳифа ба саҳифа, дар як вақт 10 профил мегирем.

Дар ин марҳила ман маълумот ва озодии кофӣ доштам, то кор дар лоиҳаи ҳайвонотро идома диҳам. Аммо кӯшиш накардани ин маълумот дар ҷои худ гуноҳ мебуд, зеро он аллакай дар даст буд. Мо ба Ember, ки дар пеш истифода мешавад, намеравем. jQuery ба сайт пайваст карда шуд ва дониши синтаксиси асосиро дар хотира кофта, шумо метавонед дар тӯли якчанд дақиқа чизҳои зеринро эҷод кунед.

рамзи 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="/tg/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="/tg/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;

Агар шумо инро мустақиман дар консол дар саҳифаи ҷустуҷӯ иҷро кунед, он тугмаеро илова мекунад, ки бо ҳар як клик 10 профили навро бор мекунад ва онҳоро дар рӯйхат нишон медиҳад. Албатта, пеш аз ин кор нишона ва URL-ро ба нишони зарурӣ иваз кунед. Блоки профил дорои ном, мавқеъ, макон, истинод ба профил ва тасвири ҷойнишинро дар бар мегирад.

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

хулоса

Ҳамин тариқ, мо бо ҳадди ақали кӯшиш тавонистем, ки нуқтаи заифро пайдо кунем ва бидуни маҳдудият ҷустуҷӯи худро барқарор кунем. Барои тахлили маълумот ва рохи он, ба худи дархост назар кардан кифоя буд.

Ман гуфта наметавонам, ки ин як мушкили ҷиддӣ барои LinkedIn аст, зеро он ҳеҷ гуна таҳдид намекунад. Максимум фоидаи аз даст додашуда аз ҳисоби чунин "рафторҳо" мебошад, ки ба шумо имкон медиҳад, ки аз пардохти мукофот худдорӣ кунед. Шояд чунин посухи сервер барои кори дурусти дигар қисматҳои сайт зарур бошад ё ин танҳо танбалии таҳиягарон ва набудани захираҳо имкон намедиҳад, ки он хуб анҷом дода шавад. (Маҳдудият дар моҳи январи соли 2015 пайдо шуд; пеш аз ин маҳдудият вуҷуд надошт).

PS

Табиист, ки рамзи jQuery мисоли хеле ибтидоии қобилиятҳост. Дар айни замон ман як васеъкунии браузерро барои мувофиқ кардани ниёзҳои ман сохтаам. Он тугмаҳои идоракуниро илова мекунад ва профилҳои пурраро бо тасвирҳо, тугмаи даъват ва пайвастҳои умумӣ медиҳад. Илова бар ин, он ба таври динамикӣ филтрҳоро барои маконҳо, ширкатҳо ва чизҳои дигар ҷамъоварӣ мекунад ва аз кукиҳо нишона мегирад. Ҳамин тавр, дигар ҳеҷ чизро сахт код кардан лозим нест. Хуб, он майдонҳои танзимоти иловагиро илова мекунад, ки "дар як вақт чанд профилро дархост кардан лозим аст, то 49".

Гузаронидани маҳдудияти ҷустуҷӯи LinkedIn тавассути бозӣ бо API

Ман то ҳол дар болои ин илова кор карда истодаам ва нақша дорам, ки онро ба омма пешкаш кунам. Агар таваҷҷӯҳ дошта бошед, нависед.

Манбаъ: will.com

Илова Эзоҳ