Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Terfyn

Mae cymaint o gyfyngiad ar LinkedIn - Terfyn defnydd masnachol. Mae’n hynod debygol nad ydych chi, fel fi tan yn ddiweddar, erioed wedi dod ar draws na chlywed amdano.

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Hanfod y terfyn yw, os ydych chi'n defnyddio'r chwiliad am bobl y tu allan i'ch cysylltiadau yn rhy aml (nid oes unrhyw fetrigau union, mae'r algorithm yn penderfynu yn seiliedig ar eich gweithredoedd - pa mor aml a faint wnaethoch chi chwilio, ychwanegu pobl), yna canlyniad y chwiliad yn gyfyngedig i dri phroffil, yn lle 1000 (100 tudalen rhagosodedig, 10 proffil y dudalen). Mae'r terfyn yn cael ei ailosod ar ddechrau pob mis. Yn naturiol, nid oes gan gyfrifon premiwm y cyfyngiad hwn.

Ond ddim yn bell yn Γ΄l, ar gyfer prosiect anifeiliaid anwes, dechreuais chwarae llawer gyda chwilio LinkedIn a chefais y cyfyngiad hwn yn sydyn. Yn naturiol, doeddwn i ddim yn hoffi hyn yn fawr iawn, oherwydd doeddwn i ddim yn ei ddefnyddio at unrhyw ddibenion masnachol, felly fy meddwl cyntaf oedd astudio'r cyfyngiad a cheisio mynd o'i gwmpas.

[Eglurhad pwysig: cyflwynir y deunyddiau yn yr erthygl at ddibenion gwybodaeth ac addysgol yn unig. Nid yw'r awdur yn annog eu defnyddio at ddibenion masnachol.]

Rydym yn astudio'r broblem

Mae gennym ni: yn lle deg proffil gyda thudaleniad, dim ond tri mae'r chwiliad yn eu dychwelyd, ac ar Γ΄l hynny mae bloc gydag β€œargymhelliad” o gyfrif premiwm yn cael ei fewnosod ac isod mae proffiliau aneglur ac na ellir eu clicio.

Ar unwaith, mae'r llaw yn estyn allan i'r consol datblygwr i edrych ar y proffiliau cudd hyn - efallai y gallwn gael gwared ar rai arddulliau niwlio, neu dynnu gwybodaeth o floc yn y marcio. Ond, yn eithaf disgwyliedig, mae'r proffiliau hyn yn gyfiawn lluniau dalfan ac nid oes unrhyw wybodaeth yn cael ei storio.

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Iawn, nawr gadewch i ni edrych ar y tab Rhwydwaith a gwirio a yw'r canlyniadau chwilio amgen sy'n dychwelyd dim ond tri phroffil yn gweithio mewn gwirionedd. Rydym yn canfod y cais y mae gennym ddiddordeb ynddo ar gyfer β€œ/api/search/ blended” ac yn edrych ar yr ymateb.

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Daw proffiliau mewn amrywiaeth `cynnwys', ond mae 15 endid ynddo eisoes Yn yr achos hwn, mae'r tri cyntaf ohonynt yn wrthrychau Γ’ gwybodaeth ychwanegol, mae pob gwrthrych yn cynnwys gwybodaeth am broffil penodol (er enghraifft, a yw'r proffil yn premiwm. ).

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Mae'r 12 nesaf yn broffiliau go iawn - canlyniadau chwilio, a dim ond tri ohonynt fydd yn cael eu dangos i ni. Fel y gallwch chi ddyfalu eisoes, dim ond y rhai sy'n derbyn gwybodaeth ychwanegol y mae'n ei ddangos (y tri gwrthrych cyntaf). Er enghraifft, os cymerwch yr ateb o broffil heb derfyn, byddwch yn derbyn 28 endid - 10 gwrthrych gydag ychwanegol. gwybodaeth a 18 proffil.

Ateb ar gyfer proffil heb gyfyngiadOsgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API
Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Pam mae mwy na 10 proffil yn cyrraedd, er y gofynnir am union 10, ac nid ydynt yn cymryd rhan yn yr arddangosfa mewn unrhyw ffordd, hyd yn oed ar y dudalen nesaf ni fyddant - wn i ddim eto. Os dadansoddwch URL y cais, gallwch weld bod cyfrif = 10 (faint o broffiliau i'w dychwelyd yn yr ymateb, uchafswm o 49).

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Byddwn yn falch o dderbyn unrhyw sylwadau ar y mater hwn.

Gadewch i ni arbrofi

Iawn, y peth pwysicaf rydyn ni'n ei wybod yn sicr nawr yw bod mwy o broffiliau yn yr ymateb nag y maen nhw'n ei ddangos i ni. Mae hyn yn golygu y gallwn gael mwy o ddata, er gwaethaf y terfyn. Gadewch i ni geisio tynnu'r API ein hunain, yn uniongyrchol o'r consol, gan ddefnyddio fetch.

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Yn Γ΄l y disgwyl, rydym yn cael gwall, 403. Mae hyn oherwydd diogelwch, yma nid ydym yn anfon tocyn CSRF (CSRF ar Wicipedia. Yn gryno, mae tocyn unigryw yn cael ei ychwanegu at bob cais, sy'n cael ei wirio ar y gweinydd am ddilysrwydd).

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Gellir ei gopΓ―o o unrhyw gais llwyddiannus arall neu o gwcis, lle caiff ei storio yn y maes 'JSESSIONID'.

Ble i ddod o hyd i'r tocynPennawd cais arall:

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Neu o gwcis, yn uniongyrchol trwy'r consol:

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Gadewch i ni geisio eto, y tro hwn rydym yn pasio'r gosodiadau i'w nΓ΄l, lle rydym yn nodi ein tocyn csrf fel paramedr yn y pennawd.

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Llwyddiant, rydym yn derbyn pob un o'r 10 proffil. :tada:

Oherwydd y gwahaniaeth mewn penawdau, mae strwythur yr ymateb ychydig yn wahanol i'r hyn a dderbyniwyd yn y cais gwreiddiol. Gallwch gael yr un strwythur os ydych yn ychwanegu 'Derbyn: 'application/vnd.linkedin.normalized+json+2.1' i'n gwrthrych, wrth ymyl y tocyn csrf.
Ymateb enghreifftiol gyda phennawd ychwanegolOsgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Mwy am y pennawd Derbyn

Beth sydd nesaf?

Yna gallwch chi olygu (Γ’ llaw neu awtomeiddio) y paramedr `cychwyn`, gan bwyntio at y mynegai, gan ddechrau y byddwn yn cael 10 proffil (diofyn = 0) o'r canlyniad chwiliad cyfan. Mewn geiriau eraill, trwy ei gynyddu 10 ar Γ΄l pob cais, rydym yn cael yr allbwn tudalen-wrth-dudalen arferol, 10 proffil ar y tro.

Ar y cam hwn roedd gen i ddigon o ddata a rhyddid i barhau i weithio ar y prosiect anifeiliaid anwes. Ond byddai wedi bod yn drueni peidio Γ’ cheisio arddangos y data hwn yn y fan a'r lle, gan ei fod eisoes wrth law. Ni awn i Ember, a ddefnyddir yn y blaen. Roedd jQuery wedi'i gysylltu Γ’'r wefan, ac ar Γ΄l cloddio'r wybodaeth am gystrawen sylfaenol yn y cof, gallwch chi greu'r canlynol mewn ychydig funudau.

cod 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="/cy/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="/cy/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;

Os gwnewch hyn yn uniongyrchol yn y consol ar y dudalen chwilio, bydd yn ychwanegu botwm sy'n llwytho 10 proffil newydd gyda phob clic ac yn eu gwneud mewn rhestr. Wrth gwrs, newidiwch y tocyn a'r URL i'r un gofynnol cyn gwneud hyn. Bydd y bloc proffil yn cynnwys enw, lleoliad, lleoliad, dolen i'r proffil a delwedd dalfan.

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Casgliad

Felly, gydag ychydig iawn o ymdrech, roeddem yn gallu dod o hyd i'r man gwan ac adennill ein chwiliad heb gyfyngiadau. Roedd yn ddigon i ddadansoddi'r data a'i lwybr, edrych i mewn i'r cais ei hun.

Ni allaf ddweud bod hon yn broblem ddifrifol i LinkedIn, oherwydd nid yw'n peri unrhyw fygythiad. Yr uchafswm yw elw a gollwyd oherwydd β€œrhagolygon gweithio” o'r fath, sy'n eich galluogi i osgoi talu am bremiwm. Efallai bod angen ymateb o'r fath gan y gweinydd ar gyfer gweithrediad cywir rhannau eraill o'r wefan, neu yn syml diogi'r datblygwyr a diffyg adnoddau nad yw'n caniatΓ‘u iddo gael ei wneud yn dda. (Ymddangosodd y cyfyngiad ym mis Ionawr 2015; cyn hyn nid oedd terfyn).

PS

Yn naturiol, mae'r cod jQuery yn enghraifft eithaf cyntefig o'r galluoedd. Ar hyn o bryd rwyf wedi creu estyniad porwr i siwtio fy anghenion. Mae'n ychwanegu botymau rheoli ac yn gwneud proffiliau llawn gyda lluniau, botwm gwahoddiad a chysylltiadau cyffredinol. Hefyd, mae'n casglu hidlwyr ar gyfer lleoliadau, cwmnΓ―au a phethau eraill yn ddeinamig, ac yn adfer tocyn o gwcis. Felly nid oes angen codio caled unrhyw beth bellach. Wel, mae'n ychwanegu meysydd gosodiadau ychwanegol, a la β€œfaint o broffiliau i ofyn amdanynt ar y tro, hyd at 49.”

Osgoi terfyn chwilio LinkedIn trwy chwarae gyda'r API

Rwy'n dal i weithio ar yr ychwanegiad hwn ac yn bwriadu ei ryddhau i'r cyhoedd. Ysgrifennwch os oes gennych ddiddordeb.

Ffynhonnell: hab.com

Ychwanegu sylw