Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Iye to

Iru aropin kan wa lori LinkedIn - Commercial lilo iye to. O ṣeese pupọ pe iwọ, bii emi titi di aipẹ, ko tii pade tabi gbọ rẹ rara.

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Ohun pataki ti opin ni pe ti o ba lo wiwa fun awọn eniyan ni ita awọn olubasọrọ rẹ nigbagbogbo (ko si awọn metiriki deede, algorithm pinnu da lori awọn iṣe rẹ - iye igba ati iye melo ti o wa, awọn eniyan ṣafikun), lẹhinna abajade wiwa yoo ni opin si awọn profaili mẹta, dipo 1000 (awọn oju-iwe 100 aiyipada, awọn profaili 10 fun oju-iwe kan). Opin ti wa ni ipilẹ ni ibẹrẹ oṣu kọọkan. Nipa ti ara, Awọn akọọlẹ Ere ko ni aropin yii.

Ṣugbọn ko pẹ sẹhin, fun iṣẹ akanṣe ọsin, Mo bẹrẹ ṣiṣere pupọ pẹlu wiwa LinkedIn ati lojiji ni aropin yii. Nipa ti ara, Emi ko fẹran eyi pupọ, nitori Emi ko lo fun awọn idi iṣowo eyikeyi, nitorinaa ironu akọkọ mi ni lati ṣe iwadi aropin ati gbiyanju lati wa ni ayika rẹ.

[Alaye pataki kan: awọn ohun elo ti o wa ninu nkan naa ni a gbekalẹ nikan fun alaye ati awọn idi eto-ẹkọ. Onkọwe ko ṣe iwuri fun lilo wọn fun awọn idi iṣowo.]

A n ka iṣoro naa

A ni: dipo awọn profaili mẹwa pẹlu pagination, wiwa pada nikan mẹta, lẹhin eyi ti a fi sii bulọọki pẹlu “iṣeduro” ti akọọlẹ Ere kan ti a fi sii ati ni isalẹ jẹ awọn profaili blurry ati ti kii-tẹ.

Lẹsẹkẹsẹ, ọwọ na kan si console olupilẹṣẹ lati wo awọn profaili ti o farapamọ wọnyi - boya a le yọkuro diẹ ninu awọn aza aitọ, tabi yọ alaye jade lati bulọki ninu isamisi. Ṣugbọn, oyimbo o ti ṣe yẹ, awọn profaili wa ni o kan placeholder awọn aworan ko si si alaye ti o ti fipamọ.

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

O dara, ni bayi jẹ ki a wo taabu Nẹtiwọọki ki o ṣayẹwo boya awọn abajade wiwa yiyan ti o pada awọn profaili mẹta nikan ṣiṣẹ gangan. A rii ibeere ti a nifẹ si fun “/api/search/ blended” ati wo idahun naa.

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Awọn profaili wa ni akojọpọ 'pẹlu', ṣugbọn awọn ile-iṣẹ 15 tẹlẹ wa ninu rẹ, awọn mẹta akọkọ jẹ awọn nkan pẹlu alaye afikun, ohun kọọkan ni alaye lori profaili kan pato (fun apẹẹrẹ, boya profaili jẹ Ere. ).

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Awọn atẹle 12 jẹ awọn profaili gidi - awọn abajade wiwa, eyiti mẹta nikan ni yoo han si wa. Bi o ti le gboju, o fihan nikan awọn ti o gba alaye afikun (awọn nkan mẹta akọkọ). Fun apẹẹrẹ, ti o ba gba idahun lati profaili kan laisi opin, iwọ yoo gba awọn nkan 28 - awọn nkan 10 pẹlu afikun. alaye ati 18 profaili.

Dahun fun profaili lai iyeSisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API
Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Kini idi ti diẹ sii ju awọn profaili mẹwa 10 de, botilẹjẹpe deede 10 ni a beere, ati pe wọn ko kopa ninu ifihan ni eyikeyi ọna, paapaa ni oju-iwe atẹle wọn kii yoo jẹ - Emi ko mọ sibẹsibẹ. Ti o ba ṣe itupalẹ URL ibeere naa, o le rii iye yẹn = 10 (awọn profaili melo ni lati pada si idahun, o pọju 49).

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Inu mi yoo dun lati gba eyikeyi awọn asọye lori ọran yii.

Jẹ ká ṣàdánwò

O dara, ohun pataki julọ ti a mọ ni idaniloju ni pe awọn profaili diẹ sii wa ninu idahun ju ti wọn fihan wa. Eyi tumọ si pe a le gba data diẹ sii, laibikita opin. Jẹ ki a gbiyanju lati fa API funrararẹ, taara lati inu console, ni lilo bu.

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Gẹgẹbi a ti ṣe yẹ, a gba aṣiṣe kan, 403. Eyi jẹ nitori aabo, nibi a ko firanṣẹ ami CSRF kan (CSRF lori Wikipedia. Ni kukuru, ami iyasọtọ kan ni a ṣafikun si ibeere kọọkan, eyiti o ṣayẹwo lori olupin fun otitọ).

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

O le ṣe daakọ lati eyikeyi ibeere aṣeyọri miiran tabi lati awọn kuki, nibiti o ti fipamọ sinu aaye 'JSESSIONID'.

Nibo ni lati wa aami naaAkọsori ti ibeere miiran:

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Tabi lati awọn kuki, taara nipasẹ console:

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Jẹ ki a gbiyanju lẹẹkansi, ni akoko yii a kọja awọn eto lati mu, ninu eyiti a ṣe pato csrf-token wa bi paramita ninu akọsori.

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Aṣeyọri, a gba gbogbo awọn profaili 10. :tada:

Nitori iyatọ ninu awọn akọle, ọna ti idahun jẹ iyatọ diẹ si ohun ti o gba ninu ibeere atilẹba. O le gba eto kanna ti o ba ṣafikun 'Gba:'application/vnd.linkedin.normalized+json+2.1' si nkan wa, lẹgbẹẹ ami ami csrf.
Idahun apẹẹrẹ pẹlu akọsori ti a ṣafikunSisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Diẹ ẹ sii nipa awọn Gba akọsori

Ohun ti ni tókàn?

Lẹhinna o le ṣatunkọ (pẹlu ọwọ tabi adaṣe) paramita `bẹrẹ`, tọka si atọka, ti o bẹrẹ lati eyiti a yoo fun wa ni awọn profaili 10 (aiyipada = 0) lati gbogbo abajade wiwa. Ni awọn ọrọ miiran, nipa jijẹ rẹ nipasẹ 10 lẹhin ibeere kọọkan, a gba iṣejade oju-iwe ni igbagbogbo, awọn profaili 10 ni akoko kan.

Ni ipele yii Mo ni data to ati ominira lati tẹsiwaju ṣiṣẹ lori iṣẹ akanṣe ọsin. Ṣugbọn yoo jẹ itiju lati ma gbiyanju lati ṣafihan data yii taara ni aaye, nitori o ti wa ni ọwọ. A kii yoo lọ sinu Ember, eyiti a lo ni iwaju. jQuery ti sopọ si aaye naa, ati pe o ti wa imo ti ipilẹ sintasi ni iranti, o le ṣẹda atẹle ni iṣẹju diẹ.

jQuery koodu

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

Ti o ba ṣe eyi taara ni console lori oju-iwe wiwa, yoo ṣafikun bọtini kan ti o gbe awọn profaili tuntun 10 pẹlu titẹ kọọkan ati ṣe wọn sinu atokọ kan. Nitoribẹẹ, yi ami-ami ati URL pada si ọkan ti a beere ṣaaju ṣiṣe eyi. Àkọsílẹ profaili yoo ni orukọ ninu, ipo, ipo, ọna asopọ si profaili ati aworan ti o ni aaye kan.

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

ipari

Nitorinaa, pẹlu igbiyanju ti o kere ju, a ni anfani lati wa aaye ti ko lagbara ati tun ri wiwa wa laisi awọn ihamọ. O to lati ṣe itupalẹ data ati ọna rẹ, wo ibeere naa funrararẹ.

Emi ko le sọ pe eyi jẹ iṣoro pataki fun LinkedIn, nitori pe ko ṣe irokeke eyikeyi. O pọju ti sọnu èrè nitori iru "awọn iṣẹ-ṣiṣe", eyiti o fun ọ laaye lati yago fun sisanwo fun Ere. Boya iru esi lati ọdọ olupin jẹ pataki fun iṣẹ deede ti awọn ẹya miiran ti aaye naa, tabi o jẹ ọlẹ ti awọn olupilẹṣẹ ati aini awọn orisun ti ko gba laaye lati ṣe daradara. (Iwọn idiwọn han ni Oṣu Kini ọdun 2015; ṣaaju eyi ko si opin).

PS

Nipa ti, koodu jQuery jẹ apẹẹrẹ alakoko ti awọn agbara. Ni akoko ti mo ti ṣẹda itẹsiwaju ẹrọ aṣawakiri kan lati ba awọn iwulo mi ṣe. O ṣafikun awọn bọtini iṣakoso ati ṣe awọn profaili ni kikun pẹlu awọn aworan, bọtini ifiwepe ati awọn asopọ gbogbogbo. Ni afikun, o gba awọn asẹ fun awọn ipo, awọn ile-iṣẹ, ati awọn nkan miiran, ati gba ami-ami kan lati awọn kuki. Nitorinaa ko si iwulo lati ṣe koodu lile ohunkohun mọ. O dara, o ṣafikun awọn aaye eto afikun, “awọn profaili melo ni lati beere ni akoko kan, to 49.”

Sisọ opin wiwa LinkedIn nipasẹ ṣiṣere pẹlu API

Mo tun n ṣiṣẹ lori afikun yii ati gbero lati tu silẹ fun gbogbo eniyan. Kọ ti o ba nife.

orisun: www.habr.com

Fi ọrọìwòye kun