API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

සීමාව

LinkedIn හි එවැනි සීමාවක් තිබේ - වාණිජ භාවිතය සීමාව. මෑතක් වන තුරුම මා මෙන් ඔබත් එය කිසිදාක හමු වී හෝ අසා නැති බව බොහෝ දුරට ඉඩ තිබේ.

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

සීමාවේ සාරය නම්, ඔබ ඔබේ සම්බන්ධතා වලින් පිටත පුද්ගලයින් සඳහා සෙවීම නිතර භාවිතා කරන්නේ නම් (නිශ්චිත මිනුම් දණ්ඩ නොමැත, ඇල්ගොරිතම ඔබේ ක්‍රියාවන් මත පදනම්ව තීරණය කරයි - ඔබ කොපමණ වාරයක් සහ කොපමණ ප්‍රමාණයක් සෙව්වාද, පුද්ගලයින් එකතු කළාද), එවිට සෙවුම් ප්‍රතිඵලය 1000 වෙනුවට පැතිකඩ තුනකට සීමා වනු ඇත (පෙරනිමි පිටු 100, පිටුවකට පැතිකඩ 10). සෑම මසකම ආරම්භයේදී සීමාව නැවත සකසනු ලැබේ. ස්වභාවිකවම, වාරික ගිණුම් වලට මෙම සීමාව නොමැත.

නමුත් වැඩි කල් නොගොස්, සුරතල් ව්‍යාපෘතියක් සඳහා, මම LinkedIn සෙවුම සමඟ බොහෝ සෙයින් සෙල්ලම් කිරීමට පටන් ගත් අතර හදිසියේම මෙම සීමාව ඇති විය. ස්වාභාවිකවම, මම මෙයට එතරම් කැමැත්තක් දැක්වූයේ නැත, මම මෙය කිසිදු වාණිජමය අරමුණු සඳහා භාවිතා නොකළ නිසා, මගේ පළමු සිතුවිල්ල වූයේ සීමාව අධ්‍යයනය කර එයින් මිදීමට උත්සාහ කිරීමයි.

[වැදගත් පැහැදිලි කිරීමක්: ලිපියේ ඇති ද්රව්ය තොරතුරු සහ අධ්යාපනික අරමුණු සඳහා පමණක් ඉදිරිපත් කර ඇත. කතුවරයා ඒවා වාණිජ අරමුණු සඳහා භාවිතා කිරීමට දිරිගන්වන්නේ නැත.]

අපි ගැටලුව අධ්යයනය කරමින් සිටිමු

අප සතුව ඇත: පේජිනේෂන් සහිත පැතිකඩ දහයක් වෙනුවට, සෙවුම ලබා දෙන්නේ තුනක් පමණි, ඉන්පසු වාරික ගිණුමක “නිර්දේශයක්” සහිත බ්ලොක් එකක් ඇතුළත් කර ඇති අතර පහත බොඳ වූ සහ ක්ලික් කළ නොහැකි පැතිකඩ ඇත.

වහාම, මෙම සැඟවුණු පැතිකඩ දෙස බැලීමට අත සංවර්ධක කොන්සෝලය වෙත ළඟා වේ - සමහර විට අපට නොපැහැදිලි මෝස්තර ඉවත් කළ හැකිය, නැතහොත් සලකුණු කිරීමේ බ්ලොක් එකකින් තොරතුරු උකහා ගත හැකිය. එහෙත්, බෙහෙවින් අපේක්ෂා කරන පරිදි, මෙම පැතිකඩයන් සාධාරණයි ස්ථාන දරණ පින්තූර සහ කිසිදු තොරතුරක් ගබඩා කර නැත.

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

හරි, දැන් අපි Network පටිත්ත දෙස බලමු සහ පැතිකඩ තුනක් පමණක් ලබා දෙන විකල්ප සෙවුම් ප්‍රතිඵල සැබවින්ම ක්‍රියා කරන්නේ දැයි පරීක්ෂා කරන්න. “/api/search/blended” සඳහා අප උනන්දු වන ඉල්ලීම සොයාගෙන ප්‍රතිචාරය දෙස බලන්න.

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

පැතිකඩ 'ඇතුළත්' අරාවකින් පැමිණේ, නමුත් එහි දැනටමත් ආයතන 15 ක් ඇත, ඒවායින් පළමු තුන අමතර තොරතුරු සහිත වස්තූන් වේ, සෑම වස්තුවකම නිශ්චිත පැතිකඩක තොරතුරු අඩංගු වේ (උදාහරණයක් ලෙස, පැතිකඩ වාරික ද යන්න. )

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

ඊළඟ 12 සැබෑ පැතිකඩ - සෙවුම් ප්‍රතිඵල, ඉන් තුනක් පමණක් අපට පෙන්වනු ඇත. ඔබට දැනටමත් අනුමාන කළ හැකි පරිදි, එය අතිරේක තොරතුරු (පළමු වස්තු තුන) ලබා ගන්නා අය පමණක් පෙන්වයි. උදාහරණයක් ලෙස, ඔබ සීමාවකින් තොරව පැතිකඩකින් පිළිතුර ලබා ගන්නේ නම්, ඔබට ආයතන 28 ක් ලැබෙනු ඇත - අමතර වස්තු 10 ක්. තොරතුරු සහ පැතිකඩ 18 ක්.

සීමාවකින් තොරව පැතිකඩ සඳහා පිළිතුරුAPI සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම
API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

හරියටම 10ක් ඉල්ලා සිටියද, ඔවුන් කිසිදු ආකාරයකින් දර්ශනයට සහභාගී නොවන්නේ නම්, පැතිකඩ 10කට වඩා පැමිණෙන්නේ ඇයි, ඊළඟ පිටුවේ පවා ඒවා නොවනු ඇත - මම තවමත් නොදනිමි. ඔබ ඉල්ලීම් URL විශ්ලේෂණය කරන්නේ නම්, ඔබට එම count=10 (ප්‍රතිචාරය තුළ ආපසු ලබා දිය යුතු පැතිකඩ ගණන, උපරිම 49) දැකිය හැක.

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

මෙම කාරණය සම්බන්ධයෙන් කිසියම් අදහස් දැක්වීමක් ලැබීමට මම සතුටු වෙමි.

අපි අත්හදා බලමු

හරි, අපි දැන් නිසැකවම දන්නා වැදගත්ම දෙය නම්, ඔවුන් අපට පෙන්වන ප්‍රමාණයට වඩා වැඩි පැතිකඩ ප්‍රතිචාරයේ ඇති බවයි. මෙයින් අදහස් කරන්නේ සීමාව තිබියදීත් අපට වැඩි දත්ත ලබා ගත හැකි බවයි. අපි Fetch භාවිතා කර කොන්සෝලයෙන් කෙලින්ම API අදින්න උත්සාහ කරමු.

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

බලාපොරොත්තු වූ පරිදි, අපට දෝෂයක් ලැබේ, 403. මෙය ආරක්ෂාව නිසා ය, මෙහි අපි CSRF ටෝකනයක් යවන්නේ නැත (විකිපීඩියාවේ CSRF. කෙටියෙන් කිවහොත්, සෑම ඉල්ලීමකටම අනන්‍ය ටෝකනයක් එකතු කරනු ලැබේ, එය සත්‍යතාව සඳහා සේවාදායකයේ පරීක්ෂා කරනු ලැබේ).

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

එය වෙනත් ඕනෑම සාර්ථක ඉල්ලීමකින් හෝ එය 'JSESSIONID' ක්ෂේත්‍රයේ ගබඩා කර ඇති කුකීස් වෙතින් පිටපත් කළ හැක.

ටෝකනය සොයා ගැනීමට කොහෙදතවත් ඉල්ලීමක ශීර්ෂය:

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

හෝ කුකීස් වලින්, කෙලින්ම කොන්සෝලය හරහා:

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

අපි නැවත උත්සාහ කරමු, මෙවර අපි ලබා ගැනීමට සැකසුම් පසු කරමු, එහිදී අපි අපගේ csrf-ටෝකනය ශීර්ෂයේ පරාමිතියක් ලෙස සඳහන් කරමු.

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

සාර්ථකයි, අපට පැතිකඩ 10ම ලැබේ. :tada:

ශීර්ෂවල වෙනස නිසා, ප්‍රතිචාරයේ ව්‍යුහය මුල් ඉල්ලීමේ ලැබුණු දේට වඩා තරමක් වෙනස් වේ. ඔබ csrf ටෝකනයට යාබදව අපගේ වස්තුවට 'Accept: 'application/vnd.linkedin.normalized+json+2.1' එකතු කළහොත් ඔබට එම ව්‍යුහයම ලබා ගත හැක.
එක් කළ ශීර්ෂය සමඟ උදාහරණ ප්‍රතිචාරයAPI සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

පිළිගන්න ශීර්ෂය ගැන වැඩි විස්තර

ඊළඟට කුමක්ද?

එවිට ඔබට සම්පූර්ණ සෙවුම් ප්‍රතිඵලයෙන් අපට පැතිකඩ 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="/si/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="/si/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ක් පූරණය කරන බොත්තමක් එක් කර ඒවා ලැයිස්තුවකට ලබා දේ. හැබයි මේක කරන්න කලින් token එකයි URL එකයි අවශ්‍ය එකට වෙනස් කරන්න. පැතිකඩ කොටසෙහි නම, පිහිටීම, ස්ථානය, පැතිකඩ වෙත සබැඳිය සහ ස්ථාන දරන්නා රූපයක් අඩංගු වේ.

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

නිගමනය

මේ අනුව, අවම උත්සාහයකින්, දුර්වල ස්ථානය සොයා ගැනීමටත්, සීමාවකින් තොරව අපගේ සෙවීම නැවත ලබා ගැනීමටත් අපට හැකි විය. දත්ත සහ එහි මාර්ගය විශ්ලේෂණය කිරීම, ඉල්ලීම දෙස බැලීම ප්රමාණවත් විය.

LinkedIn සඳහා මෙය බරපතල ගැටළුවක් බව මට පැවසිය නොහැක, මන්ද එය කිසිදු තර්ජනයක් එල්ල නොකරන බැවිනි. එවැනි "වැඩසටහන්" හේතුවෙන් උපරිම ලාභය අහිමි වන අතර, වාරික සඳහා ගෙවීමෙන් වැළකී සිටීමට ඔබට ඉඩ සලසයි. සමහරවිට එවැනි සේවාදායක ප්රතිචාරයක් වෙබ් අඩවියේ අනෙකුත් කොටස්වල නිවැරදි ක්රියාකාරීත්වය සඳහා අවශ්ය වේ, නැතහොත් එය සංවර්ධකයින්ගේ කම්මැලිකම සහ එය හොඳින් සිදු කිරීමට ඉඩ නොදෙන සම්පත් හිඟකමකි. (සීමාව 2015 ජනවාරි මාසයේදී දර්ශනය විය; මෙයට පෙර සීමාවක් නොතිබුණි).

ප්රාදේශීය සභා

ස්වාභාවිකවම, jQuery කේතය හැකියාවන් සඳහා තරමක් ප්‍රාථමික උදාහරණයකි. මේ මොහොතේ මම මගේ අවශ්‍යතාවයට ගැලපෙන පරිදි බ්‍රව්සර් දිගුවක් නිර්මාණය කර ඇත්තෙමි. එය පාලන බොත්තම් එකතු කරන අතර පින්තූර, ආරාධනා බොත්තම සහ සාමාන්‍ය සම්බන්ධතා සමඟ සම්පූර්ණ පැතිකඩ ලබා දෙයි. තවද, එය ස්ථාන, සමාගම් සහ වෙනත් දේවල් සඳහා ගතිකව පෙරහන් එකතු කරයි, සහ කුකීස් වෙතින් ටෝකනයක් ලබා ගනී. ඒ නිසා තවදුරටත් කිසිම දෙයක් Hardcode කිරීමට අවශ්‍ය නැහැ. හොඳයි, එය අමතර සැකසුම් ක්ෂේත්‍ර එකතු කරයි, එනම් “වරකට පැතිකඩ කීයක් ඉල්ලා සිටිය යුතුද, 49 දක්වා”.

API සමඟ සෙල්ලම් කිරීමෙන් LinkedIn හි සෙවුම් සීමාව මඟ හැරීම

මම තවමත් මෙම එකතු කිරීම සඳහා කටයුතු කරමින් සිටින අතර එය මහජනතාවට නිකුත් කිරීමට සැලසුම් කරමි. ඔබ කැමති නම් ලියන්න.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න