API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

حد

LinkedIn پر ایسی حد ہے - تجارتی استعمال کی حد. یہ بہت ممکن ہے کہ آپ نے، میری طرح، حال ہی میں، اس کا سامنا نہ کیا ہو اور نہ ہی اس کے بارے میں سنا ہو۔

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

حد کا خلاصہ یہ ہے کہ اگر آپ اکثر اپنے رابطوں سے باہر کے لوگوں کی تلاش کا استعمال کرتے ہیں (کوئی درست میٹرکس نہیں ہیں، الگورتھم آپ کے اعمال کی بنیاد پر فیصلہ کرتا ہے - آپ نے کتنی بار اور کتنی تلاش کی، لوگوں کو شامل کیا)، تو تلاش کا نتیجہ 1000 کے بجائے تین پروفائلز تک محدود رہے گا (پہلے سے طے شدہ 100 صفحات، فی صفحہ 10 پروفائلز)۔ حد ہر مہینے کے شروع میں دوبارہ ترتیب دی جاتی ہے۔ قدرتی طور پر، پریمیم اکاؤنٹس میں یہ حد نہیں ہے۔.

لیکن کچھ عرصہ پہلے، ایک پالتو پروجیکٹ کے لیے، میں نے LinkedIn تلاش کے ساتھ بہت کچھ کھیلنا شروع کیا اور اچانک یہ حد ہوگئی۔ فطری طور پر، مجھے یہ زیادہ پسند نہیں آیا، کیونکہ میں نے اسے کسی تجارتی مقاصد کے لیے استعمال نہیں کیا، اس لیے میرا پہلا خیال یہ تھا کہ حد کا مطالعہ کروں اور اس کے ارد گرد جانے کی کوشش کروں۔

[ایک اہم وضاحت: مضمون میں مواد صرف معلوماتی اور تعلیمی مقاصد کے لیے پیش کیا گیا ہے۔ مصنف تجارتی مقاصد کے لیے ان کے استعمال کی حوصلہ افزائی نہیں کرتا ہے۔]

ہم مسئلہ کا مطالعہ کر رہے ہیں۔

ہمارے پاس ہے: صفحہ بندی کے ساتھ دس پروفائلز کے بجائے، تلاش صرف تین لوٹاتی ہے، جس کے بعد پریمیم اکاؤنٹ کی "سفارش" کے ساتھ ایک بلاک ڈالا جاتا ہے اور نیچے دھندلے اور غیر کلک کرنے کے قابل پروفائلز ہیں۔

فوری طور پر، ہاتھ ان پوشیدہ پروفائلز کو دیکھنے کے لیے ڈویلپر کنسول تک پہنچتا ہے - شاید ہم کچھ دھندلا پن کو ہٹا سکتے ہیں، یا مارک اپ میں موجود کسی بلاک سے معلومات نکال سکتے ہیں۔ لیکن، کافی متوقع طور پر، یہ پروفائلز صرف ہیں۔ پلیس ہولڈر تصاویر اور کوئی معلومات محفوظ نہیں ہے۔

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

ٹھیک ہے، اب آئیے نیٹ ورک ٹیب کو دیکھتے ہیں اور چیک کرتے ہیں کہ کیا متبادل تلاش کے نتائج جو صرف تین پروفائلز واپس کرتے ہیں، حقیقت میں کام کرتے ہیں۔ ہمیں وہ درخواست ملتی ہے جس میں ہماری دلچسپی "/api/search/blended" کے لیے ہے اور جواب دیکھیں۔

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

پروفائلز ایک 'شامل' صف میں آتے ہیں، لیکن اس میں پہلے سے ہی 15 ادارے موجود ہیں، ان میں سے پہلے تین اضافی معلومات کے ساتھ ہیں، ہر آبجیکٹ میں ایک مخصوص پروفائل پر معلومات ہوتی ہیں (مثال کے طور پر، چاہے پروفائل پریمیم ہو۔ )۔

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

اگلے 12 حقیقی پروفائلز ہیں - تلاش کے نتائج، جن میں سے صرف تین ہمیں دکھائے جائیں گے۔ جیسا کہ آپ پہلے ہی اندازہ لگا سکتے ہیں، یہ صرف ان لوگوں کو دکھاتا ہے جو اضافی معلومات حاصل کرتے ہیں (پہلی تین اشیاء)۔ مثال کے طور پر، اگر آپ بغیر کسی حد کے پروفائل سے جواب لیتے ہیں، تو آپ کو 28 ادارے موصول ہوں گے - اضافی کے ساتھ 10 اشیاء۔ معلومات اور 18 پروفائلز۔

بغیر کسی حد کے پروفائل کا جواب دیں۔API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا
API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

10 سے زیادہ پروفائلز کیوں آتے ہیں، حالانکہ بالکل 10 کی درخواست کی گئی ہے، اور وہ کسی بھی طرح سے ڈسپلے میں حصہ نہیں لیتے ہیں، یہاں تک کہ اگلے صفحے پر بھی وہ نہیں ہوں گے - مجھے ابھی تک نہیں معلوم۔ اگر آپ درخواست کے URL کا تجزیہ کرتے ہیں، تو آپ دیکھ سکتے ہیں کہ شمار = 10 (جواب میں کتنے پروفائلز واپس کرنے ہیں، زیادہ سے زیادہ 49)۔

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

مجھے اس معاملے پر کوئی تبصرہ موصول ہونے میں خوشی ہوگی۔

آئیے تجربہ کریں۔

ٹھیک ہے، سب سے اہم چیز جو ہم اب یقینی طور پر جانتے ہیں وہ یہ ہے کہ جواب میں اس سے کہیں زیادہ پروفائلز ہیں جو وہ ہمیں دکھاتے ہیں۔ اس کا مطلب ہے کہ ہم حد کے باوجود مزید ڈیٹا حاصل کر سکتے ہیں۔ آئیے fetch کا استعمال کرتے ہوئے براہ راست کنسول سے خود API کو کھینچنے کی کوشش کریں۔

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

جیسا کہ توقع کی جاتی ہے، ہمیں ایک ایرر ملتا ہے، 403۔ یہ سیکورٹی کی وجہ سے ہے، یہاں ہم CSRF ٹوکن نہیں بھیج رہے ہیں (ویکیپیڈیا پر CSRF. مختصراً، ہر درخواست میں ایک منفرد ٹوکن شامل کیا جاتا ہے، جس کی صداقت کے لیے سرور پر جانچ پڑتال کی جاتی ہے)۔

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

اسے کسی دوسری کامیاب درخواست سے یا کوکیز سے کاپی کیا جا سکتا ہے، جہاں یہ 'JSESSIONID' فیلڈ میں محفوظ ہے۔

ٹوکن کہاں سے تلاش کرنا ہے۔ایک اور درخواست کا سرخی:

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

یا کوکیز سے، براہ راست کنسول کے ذریعے:

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

آئیے دوبارہ کوشش کرتے ہیں، اس بار ہم سیٹنگز کو بازیافت کرنے کے لیے پاس کرتے ہیں، جس میں ہم اپنے csrf-token کو ہیڈر میں ایک پیرامیٹر کے طور پر بتاتے ہیں۔

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

کامیابی، ہم تمام 10 پروفائلز وصول کرتے ہیں۔ :tada:

ہیڈرز میں فرق کی وجہ سے، جواب کی ساخت اصل درخواست میں موصول ہونے والے ردعمل سے قدرے مختلف ہے۔ آپ کو وہی ڈھانچہ مل سکتا ہے اگر آپ 'Accept:'application/vnd.linkedin.normalized+json+2.1' کو ہمارے آبجیکٹ میں، csrf ٹوکن کے آگے شامل کرتے ہیں۔
شامل کردہ ہیڈر کے ساتھ مثال کے جواب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="/ur/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="/ur/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 نئے پروفائلز کو لوڈ کرتا ہے اور انہیں فہرست میں پیش کرتا ہے۔ یقینا، ایسا کرنے سے پہلے ٹوکن اور یو آر ایل کو مطلوبہ میں تبدیل کریں۔ پروفائل بلاک میں نام، پوزیشن، مقام، پروفائل کا لنک اور پلیس ہولڈر کی تصویر ہوگی۔

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

حاصل يہ ہوا

اس طرح، کم از کم کوشش کے ساتھ، ہم کمزور جگہ تلاش کرنے اور بغیر کسی پابندی کے اپنی تلاش کو دوبارہ حاصل کرنے میں کامیاب ہو گئے۔ یہ اعداد و شمار اور اس کے راستے کا تجزیہ کرنے کے لئے کافی تھا، درخواست میں خود کو دیکھو.

میں یہ نہیں کہہ سکتا کہ یہ LinkedIn کے لیے ایک سنگین مسئلہ ہے، کیونکہ اس سے کوئی خطرہ نہیں ہے۔ اس طرح کے "ورک آراؤنڈز" کی وجہ سے زیادہ سے زیادہ منافع کھو جاتا ہے، جو آپ کو پریمیم کی ادائیگی سے بچنے کی اجازت دیتا ہے۔ شاید سرور کی طرف سے اس طرح کا ردعمل سائٹ کے دوسرے حصوں کے درست آپریشن کے لئے ضروری ہے، یا یہ صرف ڈویلپرز کی سستی اور وسائل کی کمی ہے جو اسے اچھی طرح سے انجام دینے کی اجازت نہیں دیتی ہے۔ (پابندی جنوری 2015 میں ظاہر ہوئی؛ اس سے پہلے کوئی حد نہیں تھی)۔

PS

قدرتی طور پر، jQuery کوڈ صلاحیتوں کی بجائے قدیم مثال ہے۔ اس وقت میں نے اپنی ضروریات کے مطابق ایک براؤزر ایکسٹینشن بنایا ہے۔ یہ کنٹرول بٹن کا اضافہ کرتا ہے اور تصویروں، دعوت نامہ کے بٹن اور عام رابطوں کے ساتھ مکمل پروفائلز پیش کرتا ہے۔ اس کے علاوہ، یہ متحرک طور پر مقامات، کمپنیوں اور دیگر چیزوں کے لیے فلٹرز جمع کرتا ہے، اور کوکیز سے ایک ٹوکن بازیافت کرتا ہے۔ لہذا اب کسی بھی چیز کو ہارڈ کوڈ کرنے کی ضرورت نہیں ہے۔ ٹھیک ہے، اس میں اضافی ترتیبات کے فیلڈز شامل کیے گئے ہیں، ایک la "ایک وقت میں کتنے پروفائلز کی درخواست کرنی ہے، 49 تک۔"

API کے ساتھ کھیل کر LinkedIn کی تلاش کی حد کو نظرانداز کرنا

میں اب بھی اس اضافے پر کام کر رہا ہوں اور اسے عوام کے لیے جاری کرنے کا ارادہ رکھتا ہوں۔ اگر آپ دلچسپی رکھتے ہیں تو لکھیں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں