Ҳадди
Дар LinkedIn чунин маҳдудият вуҷуд дорад -
Моҳияти маҳдудият дар он аст, ки агар шумо ҷустуҷӯи одамонро берун аз алоқаҳои худ хеле зуд истифода баред (ягон ченакҳои дақиқ вуҷуд надорад, алгоритм дар асоси амалҳои шумо қарор қабул мекунад - чанд вақт ва чӣ қадар шумо ҷустуҷӯ кардед, одамонро илова кардед), пас натиҷаи ҷустуҷӯ ба ҷои 1000 бо се профил маҳдуд хоҳад шуд (бо пешфарз 100 саҳифа, 10 профил дар як саҳифа). Лимит дар аввали ҳар моҳ аз нав барқарор карда мешавад. Табиист,
Аммо чанде пеш, барои лоиҳаи ҳайвонот, ман бо ҷустуҷӯи LinkedIn бисёр бозӣ карданро сар кардам ва ногаҳон ин маҳдудиятро пайдо кардам. Табиист, ки ин ба ман чандон писанд наомад, зеро ман онро бо ягон ҳадафи тиҷоратӣ истифода намебурдам, аз ин рӯ аввалин фикрам ин буд, ки маҳдудиятро омӯхтан ва кӯшиш кардан ба он буд.
[Тавзеҳи муҳим: маводҳо дар мақола танҳо барои мақсадҳои иттилоотӣ ва таълимӣ пешниҳод карда мешаванд. Муаллиф истифодаи онҳоро бо мақсадҳои тиҷоратӣ ташвиқ намекунад.]
Мо масъаларо меомӯзем
Мо дорем: ба ҷои даҳ профили дорои саҳифагузорӣ, ҷустуҷӯ танҳо се профилро бармегардонад, ки пас аз он блок бо "тавсия" -и ҳисоби мукофотӣ ворид карда мешавад ва дар зер профилҳои норавшан ва кликнашаванда мебошанд.
Дарҳол, даст ба консоли таҳиякунанда мерасад, то ин профилҳои пинҳоншударо бубинад - шояд мо метавонем баъзе сабкҳои норавшанро нест кунем ё маълумотро аз блоки аломатгузорӣ хориҷ кунем. Аммо, интизор меравад, ки ин профилҳо танҳоанд
Хуб, ҳоло биёед ба ҷадвали шабака назар андозем ва тафтиш кунем, ки оё натиҷаҳои ҷустуҷӯи алтернативӣ, ки танҳо се профилро бармегардонанд, воқеан кор мекунанд. Мо дархостеро, ки ба мо манфиатдор аст, барои "/api/search/blended" пайдо мекунем ва ба посух назар мекунем.
Профилҳо дар массиви "дохилшуда" меоянд, аммо дар он аллакай 15 объект мавҷуд аст, ки дар ин ҳолат сетои аввали онҳо объектҳои дорои маълумоти иловагӣ мебошанд, ҳар як объект дорои маълумот дар бораи профили мушаххас аст (масалан, оё профил премиум аст. ).
12-тои оянда профилҳои воқеӣ мебошанд - натиҷаҳои ҷустуҷӯ, ки танҳо сетои онҳо ба мо нишон дода мешаванд. Тавре ки шумо аллакай тахмин карда метавонед, он танҳо онҳоеро нишон медиҳад, ки маълумоти иловагӣ мегиранд (се объекти аввал). Масалан, агар шумо ҷавобро аз профил бе маҳдудият қабул кунед, шумо 28 объект - 10 объекти иловагӣ мегиред. маълумот ва 18 профил.
Ҷавоб барои профил бидуни маҳдудият
Чаро зиёда аз 10 профилҳо меоянд, гарчанде ки маҳз 10 нафар дархост карда мешаванд ва онҳо ба ҳеҷ ваҷҳ дар намоиш иштирок намекунанд, ҳатто дар саҳифаи оянда онҳо нахоҳанд буд - ман ҳоло намедонам. Агар шумо URL-и дархостро таҳлил кунед, шумо метавонед онро бинед, ки шумора = 10 аст (чанд профилро дар посух баргардонед, ҳадди аксар 49).
Ман хурсанд хоҳам буд, ки ҳар гуна шарҳҳоро дар ин бора гирам.
Биёед таҷриба кунем
Хуб, муҳимтарин чизе, ки мо ҳоло аниқ медонем, ин аст, ки дар посух назар ба он ки онҳо ба мо нишон медиҳанд, профилҳои бештар вуҷуд доранд. Ин маънои онро дорад, ки мо метавонем маълумоти бештарро ба даст орем, сарфи назар аз маҳдудият. Биёед кӯшиш кунем, ки API-ро худамон мустақиман аз консол бо истифода аз fetch кашем.
Тавре ки интизор мерафт, мо хатогие мегирем, 403. Ин аз сабаби амният аст, мо дар ин ҷо аломати CSRF намефиристем (
Он метавонад аз дигар дархостҳои муваффақ ё аз кукиҳо, ки дар майдони 'JSESSIONID' нигоҳ дошта мешавад, нусхабардорӣ карда шавад.
Токенро аз куҷо пайдо кардан мумкин астСарлавҳаи дархости дигар:
Ё аз кукиҳо, мустақиман тавассути консол:
Биёед бори дигар кӯшиш кунем, ин дафъа мо танзимотро барои гирифтан мегузаронем, ки дар он мо csrf-токени худро ҳамчун параметр дар сарлавҳа нишон медиҳем.
Муваффақият, мо ҳама 10 профилро мегирем. :тада:
Аз сабаби фарқияти сарлавҳаҳо, сохтори ҷавоб аз он чизе, ки дар дархости аслӣ гирифта шудааст, каме фарқ мекунад. Шумо метавонед ҳамон сохторро ба даст оред, агар шумо ба объекти мо, дар паҳлӯи аломати csrf 'Қабул: 'application/vnd.linkedin.normalized+json+2.1' илова кунед.
Намунаи посух бо сарлавҳаи иловашуда
Бештар дар бораи сарлавҳаи Қабул
Чӣ оянда аст?
Пас шумо метавонед параметри `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 аст, зеро он ҳеҷ гуна таҳдид намекунад. Максимум фоидаи аз даст додашуда аз ҳисоби чунин "рафторҳо" мебошад, ки ба шумо имкон медиҳад, ки аз пардохти мукофот худдорӣ кунед. Шояд чунин посухи сервер барои кори дурусти дигар қисматҳои сайт зарур бошад ё ин танҳо танбалии таҳиягарон ва набудани захираҳо имкон намедиҳад, ки он хуб анҷом дода шавад. (Маҳдудият дар моҳи январи соли 2015 пайдо шуд; пеш аз ин маҳдудият вуҷуд надошт).
PS
Табиист, ки рамзи jQuery мисоли хеле ибтидоии қобилиятҳост. Дар айни замон ман як васеъкунии браузерро барои мувофиқ кардани ниёзҳои ман сохтаам. Он тугмаҳои идоракуниро илова мекунад ва профилҳои пурраро бо тасвирҳо, тугмаи даъват ва пайвастҳои умумӣ медиҳад. Илова бар ин, он ба таври динамикӣ филтрҳоро барои маконҳо, ширкатҳо ва чизҳои дигар ҷамъоварӣ мекунад ва аз кукиҳо нишона мегирад. Ҳамин тавр, дигар ҳеҷ чизро сахт код кардан лозим нест. Хуб, он майдонҳои танзимоти иловагиро илова мекунад, ки "дар як вақт чанд профилро дархост кардан лозим аст, то 49".
Ман то ҳол дар болои ин илова кор карда истодаам ва нақша дорам, ки онро ба омма пешкаш кунам. Агар таваҷҷӯҳ дошта бошед, нависед.
Манбаъ: will.com