å¶é
LinkedIn ã«ã¯ãã®ãããªå¶éããããŸã - ã ããªããç§ãšåãããã«ãã€ãæè¿ãŸã§ããã«è§Šããããšãèããããšããªãã£ãå¯èœæ§ãéåžžã«é«ãã§ãã

å¶éã®æ¬è³ªã¯ãé£çµ¡å
以å€ã®äººã®æ€çŽ¢ãããŸãã«ãé »ç¹ã«äœ¿çšãããš (æ£ç¢ºãªææšã¯ãããŸãããã¢ã«ãŽãªãºã ã¯ããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ (æ€çŽ¢ã®é »åºŠãšéãæ€çŽ¢ããŠãŒã¶ãŒã®è¿œå ) ã«åºã¥ããŠæ±ºå®ããŸã)ãæ€çŽ¢çµæããããã¡ã€ã«ã¯ 1000 ã§ã¯ãªã 100 ã«å¶éãããŸã (ããã©ã«ã㯠10 ããŒãžãããŒãžããšã« XNUMX ãããã¡ã€ã«)ã å¶éã¯æ¯æåãã«ãªã»ãããããŸãã åœç¶ã .
ããããå°ãåã«ãç§ã¯åŸæãªãããžã§ã¯ãã®ããã« LinkedIn æ€çŽ¢ãé »ç¹ã«äœ¿ãå§ãããšãããçªç¶ãã®å¶éãçºçããŸããã åœç¶ã®ããšãªãããç§ã¯ãããããŸã奜ãã§ã¯ãããŸããã§ããããªããªããç§ã¯ããã忥ç®çã§äœ¿çšããŠããªãã£ãã®ã§ãæåã«èããã®ã¯ããã®å¶éã調ã¹ãŠããããåé¿ããããšããããšã§ããã
[éèŠãªèª¬æ: ãã®èšäºã®è³æã¯æ
å ±æäŸããã³æè²ç®çã®ã¿ã«æäŸãããŠããŸãã äœè
ã¯åæ¥ç®çã§ã®äœ¿çšãæšå¥šããŸããã]
ç§ãã¡ã¯ãã®åé¡ãç ç©¶ããŠããŸã
ããŒãžããŒã·ã§ã³ã®ãã XNUMX åã®ãããã¡ã€ã«ã®ä»£ããã«ãæ€çŽ¢ã§ã¯ XNUMX åã ããè¿ãããŸãããã®åŸããã¬ãã¢ã ã¢ã«ãŠã³ãã®ãæšå¥šããå«ããããã¯ãæ¿å ¥ããããã®äžã«ã¯ãŒãããŠã¯ãªãã¯ã§ããªããããã¡ã€ã«ã衚瀺ãããŸãã
ããã«éçºè ã³ã³ãœãŒã«ã«æã䌞ã³ãŠããããã®é ããããããã¡ã€ã«ã確èªããŸããããããããŒãããã¹ã¿ã€ã«ãåé€ããããããŒã¯ã¢ããã®ãããã¯ããæ å ±ãæœåºãããã§ããã§ãããã ããããäºæ³éãããããã®ãããã¡ã€ã«ã¯åãªã ãããŠæ å ±ã¯ä¿åãããŸããã

ããã§ã¯ã[ãããã¯ãŒã¯] ã¿ããèŠãŠãXNUMX ã€ã®ãããã¡ã€ã«ã®ã¿ãè¿ãä»£æ¿æ€çŽ¢çµæãå®éã«æ©èœãããã©ããã確èªããŠã¿ãŸãããã ã/api/search/blendedãã§é¢å¿ã®ãããªã¯ãšã¹ããèŠã€ããŠããã®å¿çã確èªããŸãã

ãããã¡ã€ã«ã¯ãå«ãŸãããé
åã§æäŸãããŸããããã®äžã«ã¯ãã§ã« 15 åã®ãšã³ãã£ãã£ãå«ãŸããŠããŸãããã®å Žåãæåã® XNUMX ã€ã¯è¿œå æ
å ±ãæã€ãªããžã§ã¯ãã§ãããåãªããžã§ã¯ãã«ã¯ç¹å®ã®ãããã¡ã€ã«ã«é¢ããæ
å ± (ããšãã°ããããã¡ã€ã«ããã¬ãã¢ã ãã©ãããªã©) ãå«ãŸããŠããŸãã ïŒã

次㮠12 ã¯å®éã®ãããã£ãŒã«ãã€ãŸãæ€çŽ¢çµæã§ããããã®ãã¡ 28 ã€ã ãã衚瀺ãããŸãã ãã§ã«ãæ³åã®ãšãããè¿œå æ
å ±ãåãåã人 (æåã® 10 ã€ã®ãªããžã§ã¯ã) ã®ã¿ã衚瀺ãããŸãã ããšãã°ãå¶éãªãã§ãããã¡ã€ã«ããåçãååŸãããšã18 åã®ãšã³ãã£ã㣠(远å ã§ XNUMX åã®ãªããžã§ã¯ã) ãåãåããŸãã æ
å ±ãšXNUMXã®ãããã£ãŒã«ã
ãããã£ãŒã«ã«å¯Ÿããç¡å¶éã®åç

æ£ç¢ºã« 10 åãèŠæ±ãããŠããã«ããããããããªã 10 åãè¶ ãããããã¡ã€ã«ãå°çãã衚瀺ã«ãŸã£ããé¢äžãããæ¬¡ã®ããŒãžã§ã衚瀺ã«åå ããªãã®ãã¯ããŸã ããããŸããã ãªã¯ãšã¹ã URL ãåæãããšãcount=10 (å¿çã§è¿ããããããã¡ã€ã«ã®æ°ãæå€§ 49) ã§ããããšãããããŸãã
ãã®ä»¶ã«é¢ããŠã³ã¡ã³ããããã ããã°å¹žãã§ãã
å®éšããŠã¿ãŸããã
ããŠãç§ãã¡ãä»ç¢ºãã«ç¥ã£ãŠããæãéèŠãªããšã¯ãå¿çã«ã¯è¡šç€ºãããŠãããããå€ãã®ãããã¡ã€ã«ãå«ãŸããŠãããšããããšã§ãã ããã¯ãå¶éã«ãããããããããå€ãã®ããŒã¿ãååŸã§ããããšãæå³ããŸãã fetch ã䜿çšããŠãã³ã³ãœãŒã«ããçŽæ¥ API ãèªåã§ååŸããŠã¿ãŸãããã

äºæ³éãããšã©ãŒ 403 ãçºçããŸããããã¯ã»ãã¥ãªãã£ã«ãããã®ã§ãããã§ã¯ CSRF ããŒã¯ã³ãéä¿¡ããŸãã (ã ç°¡åã«èšããšãäžæã®ããŒã¯ã³ãåãªã¯ãšã¹ãã«è¿œå ããããµãŒããŒäžã§ä¿¡é Œæ§ããã§ãã¯ãããŸãã

ããã¯ãä»ã®æåãããªã¯ãšã¹ããŸã㯠Cookie ããã³ããŒã§ãããJSESSIONIDããã£ãŒã«ãã«ä¿åãããŸãã
ããŒã¯ã³ãèŠã€ããå Žæå¥ã®ãªã¯ãšã¹ãã®ããããŒ:

ãŸãã¯ãã³ã³ãœãŒã«ããçŽæ¥ Cookie ãã:

ããäžåºŠè©ŠããŠã¿ãŸããããä»åã¯ãã§ããããèšå®ãæž¡ããŸããããããŒå
ã®ãã©ã¡ãŒã¿ãŒãšã㊠csrf-token ãæå®ããŸãã

æåããŸããã10 åã®ãããã¡ã€ã«ããã¹ãŠåãåããŸããã :ãã :
ããããŒã®éãã«ãããå¿çã®æ§é ã¯å ã®èŠæ±ã§åä¿¡ãããã®ãšè¥å¹²ç°ãªããŸãã ãªããžã§ã¯ãã® csrf ããŒã¯ã³ã®é£ã«ãAccept: 'application/vnd.linkedin.normalized+json+2.1'ãã远å ãããšãåãæ§é ãååŸã§ããŸãã
ããããŒã远å ããå¿çã®äŸ
次ã¯äœã§ããïŒ
次ã«ãæ€çŽ¢çµæå šäœãã 10 åã®ãããã¡ã€ã« (ããã©ã«ã = 0) ãäžããããã€ã³ããã¯ã¹ãæããstartããã©ã¡ãŒã¿ãç·šé (æåãŸãã¯èªå) ããããšãã§ããŸãã ã€ãŸãããªã¯ãšã¹ãããšã« 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="/ja/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="/ja/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 幎 XNUMX æã«ç»å ŽããŸããããã以åã¯å¶éã¯ãããŸããã§ãã)ã
PS
åœç¶ã®ããšãªãããjQuery ã³ãŒãã¯æ©èœã®ããªãåå§çãªäŸã§ãã çŸæç¹ã§ã¯ãããŒãºã«åãããŠãã©ãŠã¶æ¡åŒµæ©èœãäœæããŸããã ã³ã³ãããŒã« ãã¿ã³ã远å ããåçãæåŸ ãã¿ã³ãäžè¬çãªæ¥ç¶ãå«ãå®å šãªãããã¡ã€ã«ãã¬ã³ããªã³ã°ããŸãã ããã«ãå ŽæãäŒç€Ÿããã®ä»ã®ãã£ã«ã¿ãŒãåçã«åéããCookie ããããŒã¯ã³ãååŸããŸãã ãããã£ãŠãäœãããŒãã³ãŒãããå¿ èŠã¯ãããããŸããã ããã¯ããäžåºŠã«ãªã¯ãšã¹ããããããã¡ã€ã«ã®æ°ãæå€§ 49ããªã©ã®è¿œå ã®èšå®ãã£ãŒã«ãã远å ããŸãã

ç§ã¯ãŸã ãã®è¿œå äœæ¥ãè¡ã£ãŠãããäžè¬å
¬éããäºå®ã§ãã èå³ãããã°æžããŠãã ããã
åºæïŒ habr.com


