Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

Palena

Aia kekahi palena ma LinkedIn - Ka palena hoʻohana kalepa. He mea nui paha ʻoe, e like me aʻu a hiki i kēia manawa, ʻaʻole ʻoe i ʻike a lohe ʻole paha.

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

ʻO ke kumu o ka palena inā ʻoe e hoʻohana pinepine i ka ʻimi no nā poʻe ma waho o kāu mau pilina (ʻaʻohe metric pololei, hoʻoholo ka algorithm ma muli o kāu mau hana - pehea ka pinepine a me ka nui o kāu ʻimi ʻana, hoʻohui i nā poʻe), a laila ka hopena ʻimi. e kaupalena ʻia i ʻekolu ʻaoʻao, ma kahi o 1000 (paʻamau 100 ʻaoʻao, 10 ʻaoʻao no kēlā me kēia ʻaoʻao). Hoʻonohonoho ʻia ka palena i ka hoʻomaka o kēlā me kēia mahina. Ma ke ala, ʻAʻole kēia palena i nā moʻokāki premium.

Akā ʻaʻole i liʻuliʻu, no kahi papahana pipi, hoʻomaka wau e pāʻani nui me ka ʻimi LinkedIn a loaʻa koke kēia palena. ʻOiaʻiʻo, ʻaʻole wau makemake nui i kēia, no ka mea, ʻaʻole wau i hoʻohana iā ia no nā kumu kalepa, no laila ʻo koʻu manaʻo mua e aʻo i ka palena a hoʻāʻo e hoʻopuni iā ​​​​ia.

[He wehewehe koʻikoʻi: hōʻike ʻia nā mea i loko o ka ʻatikala no nā kumu ʻike a me ka hoʻonaʻauao. ʻAʻole paipai ka mea kākau i kā lākou hoʻohana ʻana no nā hana ʻoihana.]

Ke aʻo nei mākou i ka pilikia

Loaʻa iā mākou: ma kahi o ʻumi mau ʻaoʻao me ka pagination, hoʻihoʻi ka ʻimi i ʻekolu wale nō, a laila hoʻokomo ʻia kahi poloka me kahi "manaʻo" o kahi moʻohelu kālā a ma lalo nei nā ʻaoʻao blurry a hiki ʻole ke kaomi.

Hiki koke aku ka lima i ka console developer e nānā i kēia mau huna huna - malia paha hiki iā mākou ke wehe i kekahi mau ʻano blurring, a i ʻole e unuhi i ka ʻike mai kahi poloka i ka markup. Akā, i manaʻo ʻia, he pololei kēia mau profiles nā kiʻi wahi a ʻaʻohe ʻike i mālama ʻia.

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

ʻAe, e nānā kāua i ka ʻaoʻao Network a nānā inā hana maoli nā hopena hulina ʻē aʻe e hoʻihoʻi i ʻekolu mau profiles. ʻIke mākou i ka noi a mākou e makemake ai no "/api/search/blended" a nānā i ka pane.

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

Hele mai nā ʻaoʻao i loko o kahi pūʻulu `included`, akā aia he 15 mau hui i loko o ia mea. ).

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

ʻO ka 12 aʻe he mau moʻolelo maoli - nā hopena hulina, ʻekolu wale nō e hōʻike ʻia iā mākou. E like me kāu e koho mua ai, hōʻike ia i ka poʻe i loaʻa ka ʻike hou (nā mea mua ʻekolu). No ka laʻana, inā e lawe ʻoe i ka pane mai kahi ʻaoʻao me ka ʻole o ka palena, e loaʻa iā ʻoe nā hui 28 - 10 mau mea me nā mea hou aku. ʻike a me 18 ʻaoʻao.

Pane no ka ʻaoʻao me ka palena ʻoleKaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API
Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

No ke aha i hiki mai ai ma mua o 10 mau ʻaoʻao, ʻoiai ua noi ʻia ʻo 10, ʻaʻole lākou e komo i ka hōʻike ma kekahi ʻano, ʻoiai ma ka ʻaoʻao aʻe ʻaʻole lākou - ʻaʻole wau i ʻike. Inā nānā ʻoe i ka URL noi, hiki iā ʻoe ke ʻike i kēlā helu = 10 (ehia mau ʻaoʻao e hoʻihoʻi i ka pane, ʻoi loa 49).

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

E hauʻoli wau i ka loaʻa ʻana o nā manaʻo e pili ana i kēia mea.

E hoʻāʻo kāua

ʻAe, ʻo ka mea nui a mākou e ʻike maopopo nei, ʻoi aku ka nui o nā profiles i ka pane ma mua o kā lākou hōʻike ʻana iā mākou. ʻO ia ke ʻano hiki iā mākou ke loaʻa i nā ʻikepili hou aʻe, ʻoiai ka palena. E ho'āʻo mākou e huki i ka API iā mākou iho, pololei mai ka console, me ka hoʻohana ʻana i ka fetch.

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

E like me ka mea i manaʻo ʻia, loaʻa iā mākou kahi hewa, 403. ʻO kēia no ka palekana, ma aneʻi ʻaʻole mākou e hoʻouna i kahi hōʻailona CSRF (CSRF ma Wikipedia. Ma kahi pōkole, hoʻohui ʻia kahi hōʻailona kūʻokoʻa i kēlā me kēia noi, i nānā ʻia ma ke kikowaena no ka ʻoiaʻiʻo).

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

Hiki ke kope ʻia mai kekahi noi kūleʻa ʻē aʻe a i ʻole mai nā kuki, kahi i mālama ʻia ai ma ke kahua 'JSESSIONID'.

Ma hea e loaʻa ai ka hōʻailonaKe poʻo o kekahi noi:

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

A i ʻole mai nā kuki, ma o ka console:

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

E ho'āʻo hou kāua, i kēia manawa mākou e hāʻawi i nā hoʻonohonoho e kiʻi, kahi a mākou e kuhikuhi ai i kā mākou csrf-token ma ke ʻano he ʻāpana ma ke poʻo.

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

Loaʻa iā mākou nā 10 profiles a pau. :tada:

Ma muli o ka ʻokoʻa o nā poʻomanaʻo, ʻokoʻa iki ke ʻano o ka pane mai ka mea i loaʻa i ka noi kumu. Hiki iā ʻoe ke loaʻa ke ʻano like inā hoʻohui ʻoe i ka 'Accept: 'application/vnd.linkedin.normalized+json+2.1' i kā mākou mea, ma ka ʻaoʻao o ka csrf token.
Laʻana pane me ke poʻoKaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

Nā mea hou aku e pili ana i ke poʻo poʻo

He aha ka mea e hiki mai ana?

A laila hiki iā ʻoe ke hoʻoponopono (manual a automate) i ka 'start` parameter, e kuhikuhi ana i ka index, e hoʻomaka ana e hāʻawi ʻia iā mākou 10 profiles (default = 0) mai ka hopena huli holoʻokoʻa. I nā huaʻōlelo ʻē aʻe, ma ka hoʻonui ʻana iā 10 ma hope o kēlā me kēia noi, loaʻa iā mākou ka puka maʻamau ma kēlā me kēia ʻaoʻao, 10 profiles i ka manawa.

I kēia manawa ua lawa kaʻu ʻikepili a me ke kūʻokoʻa e hoʻomau i ka hana ma ka papahana holoholona. Akā, he hewa ia ʻaʻole e hoʻāʻo e hōʻike i kēia ʻikepili ma ia wahi, no ka mea, aia ma ka lima. ʻAʻole mākou e hele i loko o Ember, i hoʻohana ʻia ma mua. Hoʻopili ʻia ʻo jQuery i ka pūnaewele, a i ka ʻeli ʻana i ka ʻike o ka syntax maʻamau i ka hoʻomanaʻo, hiki iā ʻoe ke hana i kēia i loko o ʻelua mau minuke.

jQuery code

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

Inā ʻoe e hana pololei i kēia ma ka console ma ka ʻaoʻao ʻimi, e hoʻohui ia i kahi pihi e hoʻouka i 10 mau kiʻi hou me kēlā me kēia kaomi a hoʻolilo iā lākou i kahi papa inoa. ʻOiaʻiʻo, hoʻololi i ka hōʻailona a me ka URL i ka mea i koi ʻia ma mua o ka hana ʻana i kēia. Aia ka inoa, kūlana, wahi, loulou i ka ʻaoʻao a me kahi kiʻi wahi.

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

hopena

No laila, me ka liʻiliʻi o ka hoʻoikaika ʻana, ua hiki iā mākou ke ʻimi i ka wahi nāwaliwali a loaʻa hou kā mākou ʻimi ʻana me ka ʻole o ka palena. Ua lawa ka nānā ʻana i ka ʻikepili a me kona ala, e nānā i ka noi ponoʻī.

ʻAʻole hiki iaʻu ke ʻōlelo he pilikia koʻikoʻi kēia no LinkedIn, no ka mea, ʻaʻole ia e hoʻoweliweli. Loaʻa ka loaʻa kālā ma muli o ia "workarounds", e hiki ai iā ʻoe ke pale i ka uku no ka uku. Pono paha kēlā pane kikowaena no ka hana kūpono o nā ʻāpana ʻē aʻe o ka pūnaewele, a i ʻole ka palaualelo wale nō o nā mea hoʻomohala a me ka nele o nā kumuwaiwai i ʻae ʻole e hana maikaʻi ʻia. (Ua puka ka palena ma Ianuali 2015; ma mua o kēia ʻaʻohe palena).

PS

ʻO ka mea maʻamau, ʻo ka code jQuery kahi hiʻohiʻona mua o nā hiki. I kēia manawa ua hana au i kahi hoʻonui polokalamu e kūpono i kaʻu mau pono. Hoʻohui ia i nā pihi mana a hāʻawi i nā kiʻi piha me nā kiʻi, kahi pihi kono a me nā pilina maʻamau. Eia kekahi, ʻohi ikaika ia i nā kānana no nā wahi, nā hui, a me nā mea ʻē aʻe, a kiʻi i kahi hōʻailona mai nā kuki. No laila ʻaʻohe pono e hoʻopaʻa inoa hou i kekahi mea. ʻAe, hoʻohui ia i nā kahua hoʻonohonoho hou aʻe, a la "ehia mau ʻaoʻao e noi ai i ka manawa, a hiki i 49."

Kaʻalo ʻana i ka palena ʻimi o LinkedIn ma ka pāʻani ʻana me ka API

Ke hana nei au i kēia hoʻohui a hoʻolālā e hoʻokuʻu i ka lehulehu. E kākau inā makemake ʻoe.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka