API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Чектөө

LinkedInде мындай чектөө бар - Коммерциялык колдонуу чеги. Сиз мага окшоп акыркы убакка чейин аны эч качан жолуктурбаңыз же уккан эмессиз.

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Чектөөнүн маңызы, эгер сиз байланыштарыңыздан тышкаркы адамдарды издөөнү өтө көп колдонсоңуз (так метрика жок, алгоритм сиздин аракеттериңиздин негизинде чечет - сиз канча жолу жана канча издегениңиз, адамдарды кошкон), анда издөө натыйжасы 1000 эмес, үч профиль менен чектелет (демейки 100 барак, ар бир бетке 10 профиль). Лимит ар бир айдын башында калыбына келтирилет. Табигый, премиум эсептеринде бул чектөө жок.

Бирок жакында эле, үй жаныбарлары долбоору үчүн, мен LinkedIn издөө менен көп ойной баштадым жана күтүлбөгөн жерден бул чектөөгө ээ болдум. Албетте, бул мага анча деле жаккан жок, анткени мен аны эч кандай коммерциялык максатта колдонбогондуктан, эң биринчи оюм чектөөнү изилдеп, аны айланып өтүүгө аракет кылуу болду.

[Маанилүү түшүндүрмө: макаладагы материалдар маалыматтык жана билим берүү максатында гана берилген. Автор аларды коммерциялык максатта колдонууга үндөбөйт.]

Биз маселени изилдеп жатабыз

Бизде: беттештирүү менен он профилдин ордуна, издөө үчөөнү гана кайтарат, андан кийин премиум аккаунттун "сунуштары" менен блок киргизилет жана ылдыйда бүдөмүк жана чыкылдалбаган профилдер.

Ошол замат, кол бул жашыруун профилдерди көрүү үчүн иштеп чыгуучунун консолуна жетет - балким, биз кээ бир бүдөмүк стилдерди алып салсак же белгилөөдөгү блоктон маалыматты чыгара алабыз. Бирок, күтүлгөндөй, бул профилдер жөн эле толтургуч сүрөттөр жана эч кандай маалымат сакталбайт.

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Макул, азыр Тармак өтмөгүн карап көрөлү жана үч гана профилди кайтарган альтернативдүү издөө натыйжалары чындыгында иштейби же жокпу текшерели. Бизди кызыктырган "/api/search/blended" өтүнүчүн таап, жоопту карап чыгабыз.

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Профильдер "киргизилген" массивде келет, бирок анда 15 объект бар. Бул учурда, алардын биринчи үчөө кошумча маалыматы бар объекттер болуп саналат, ар бир объект белгилүү бир профилдеги маалыматты камтыйт (мисалы, профиль премиум болобу). ).

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Кийинки 12 чыныгы профиль - издөө натыйжалары, алардын үчөө гана бизге көрсөтүлөт. Сиз буга чейин эле болжолдой тургандай, ал кошумча маалымат алгандарды гана көрсөтөт (биринчи үч объект). Мисалы, эгер сиз профилден чексиз жооп алсаңыз, анда сиз 28 объектти аласыз - кошумча менен 10 объект. маалымат жана 18 профиль.

Профильге чексиз жоопAPI менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү
API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Эмне үчүн 10дон ашык профиль келет, бирок так 10 талап кылынса да, алар дисплейге эч кандай катышпайт, атүгүл кийинки бетте алар болбойт - мен азырынча билбейм. Сурамдын URL дарегин талдап көрсөңүз, анда сиз эсеп=10 экенин көрө аласыз (жоопто канча профиль кайтарылышы керек, максимум 49).

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Мен бул маселе боюнча кандайдыр бир комментарий алууга кубанычтамын.

Келгиле эксперимент жасайлы

Макул, биз азыр так билебиз, эң негизгиси, жоопто бизге көрсөткөнгө караганда көбүрөөк профилдер бар. Бул чектөөгө карабастан, биз көбүрөөк маалымат ала алабыз дегенди билдирет. Келгиле, APIди өзүбүз алып, консолдон түз алып чыгууга аракет кылалы.

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Күтүлгөндөй, биз ката алдык, 403. Бул коопсуздукка байланыштуу, бул жерде биз CSRF белгисин жөнөткөн жокпуз (Википедиядагы CSRF. Кыскача айтканда, ар бир суроо-талапка уникалдуу токен кошулат, ал серверде аныктыгы текшерилет).

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Аны каалаган башка ийгиликтүү суроо-талаптардан же 'JSESSIONID' талаасында сакталган кукилерден көчүрүп алса болот.

Токенди кайдан тапса болотБашка сурамдын баш аты:

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Же кукилерден, түздөн-түз консол аркылуу:

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Келгиле, дагы бир жолу аракет кылып көрөлү, бул жолу биз алып келүү үчүн жөндөөлөрдү өткөрүп жатабыз, анда биз csrf-токенибизди темада параметр катары көрсөтөбүз.

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Ийгилик, биз бардык 10 профилди алабыз. :tada:

Баш тамгалардагы айырмачылыктан улам, жооптун түзүмү баштапкы сурамда алынгандан бир аз айырмаланат. Биздин объектибизге csrf белгисинин жанына "Кабыл алуу: 'application/vnd.linkedin.normalized+json+2.1'ди кошсоңуз, ошол эле структураны ала аласыз.
Кошулган баш аты менен мисал жоопAPI менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Кабыл алуу темасы жөнүндө көбүрөөк

Кийинкиси эмне?

Андан кийин сиз индексти көрсөтүп, `start` параметрин түзөтө аласыз (кол менен же автоматташтырыңыз), андан баштап бизге бүт издөө натыйжасынан 10 профиль (демейки = 0) берилет. Башкача айтканда, ар бир суроо-талаптан кийин аны 10го көбөйтүү менен биз кадимки барактан барак чыгарууну, бир убакта 10 профилди алабыз.

Бул этапта менде үй жаныбары долбоору боюнча иштөөнү улантуу үчүн жетиштүү маалыматтар жана эркиндик бар болчу. Бирок бул маалыматты ошол жерде эле көрсөтүүгө аракет кылбоо күнөө болмок, анткени алар колдо болгон. Биз фронтто колдонулган Эмберге кирбейбиз. 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="/ky/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="/ky/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 дарегин талап кылынганга өзгөртүңүз. Профиль блогу аты, орду, жайгашкан жери, профилге шилтеме жана толтургучтун сүрөтүн камтыйт.

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

жыйынтыктоо

Ошентип, минималдуу күч менен биз алсыз жерди таап, издөөбүздү чектөөсүз калыбына келтире алдык. Маалыматтарды жана анын жолун талдоо, суроо-талаптын өзүн карап көрүү жетиштүү болду.

Бул LinkedIn үчүн олуттуу көйгөй деп айта албайм, анткени ал эч кандай коркунуч туудурбайт. Максимум - бул премиум үчүн төлөөдөн качууга мүмкүндүк берген мындай "чечүүлөрдөн" улам жоголгон пайда. Балким, сервердин мындай жообу сайттын башка бөлүктөрүнүн туура иштеши үчүн зарыл болушу мүмкүн, же бул жөн гана иштеп чыгуучулардын жалкоолугу жана ресурстардын жетишсиздиги, аны жакшы кылууга мүмкүндүк бербейт. (Чектөө 2015-жылдын январында пайда болгон, буга чейин эч кандай чектөө болгон эмес).

PS

Албетте, jQuery коду - бул мүмкүнчүлүктөрдүн жөнөкөй мисалы. Учурда мен өзүмдүн муктаждыктарыма ылайыктуу браузер кеңейтүүсүн түздүм. Ал башкаруу баскычтарын кошот жана сүрөттөр, чакыруу баскычы жана жалпы байланыштар менен толук профилдерди көрсөтөт. Мындан тышкары, ал динамикалык түрдө жайгашкан жерлер, компаниялар жана башка нерселер үчүн чыпкаларды чогултат жана кукилерден белгини чыгарат. Демек, мындан ары эч нерсени катуу коддоонун кереги жок. Ооба, ал кошумча жөндөө талааларын кошот, а "бир убакта канча профиль сураса болот, 49га чейин."

API менен ойноо менен LinkedIn'дин издөө чегин айланып өтүү

Мен дагы бул толуктоонун үстүндө иштеп жатам жана аны коомчулукка чыгарууну пландап жатам. Кызыксаныз жазыныз.

Source: www.habr.com

Комментарий кошуу