هر پست اینستاگرام با دو نام شناخته میشود. یکی نام کوتاهی است که در لینک وجود دارد، مانند Dd1gQBsCWE8 در نشانی instagram.com/reel/Dd1gQBsCWE8/. نام دیگر یک عدد طولانی به شکل 3996242083173720380 است که سیستمهای داخلی اینستاگرام از آن استفاده میکنند.
تیم بازاریابی شما لینکها را در یک صفحه گسترده یادداشت میکند و پایگاه داده شما بر اساس شناسهها کار میکند. در مقطعی لازم میشود که این دو مقدار با یکدیگر تط داده شوند و اولین غریزه این است که برای هر سطر یک درخواست به API ارسال شود.
اما شما مجبور به این کار نیستید. این دو نام در واقع یک عدد واحد هستند که به دو شکل مختلف نوشته شدهاند و میتوانید تنها با چند خط کد و بدون هیچگونه درخواست شبکه، آنها را به یکدیگر تبدیل کنید.
شورتکد همان شناسه است که در مبنای ۶۴ نوشته شده است
اینستاگرام شناسه رسانه را در مبنای ۶۴ و با استفاده از الفبای زیر مینویسد:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
حرف A برابر با صفر، B برابر با ۱ و به همین ترتیب تا حروف کوچک و ارقام پیش میرود و در نهایت _ برابر با ۶۳ است. اگر یک شورتکد را به عنوان یک عدد در مبنای ۶۴ بخوانید، شناسه رسانه را به دست خواهید آورد. نوشتن شناسه در مبنای ۶۴ نیز شورتکد را به شما بازمیگرداند.
ما نخواستیم تنها به تئوری اکتفا کنیم، بنابراین آن را روی پستهای واقعی از جمله یک ویدیوئی که ناسا در ماه جاری منتشر کرده بود آزمایش کردیم. هر چهار مورد دقیقاً در هر دو جهت تبدیل شدند:
| شورتکد | شناسه رسانه |
|---|---|
DH3tWudxIKB | 3600545900919030401 |
DEiyb48AeB9 | 3540614075954356349 |
DF5s0duxDts | 3565077699422862188 |
Dd1gQBsCWE8 | 3996242083173720380 |
کدهای برنامهنویسی
زبان جاوااسکریپت برای این کار به BigInt نیاز دارد و این یک ویژگی اختیاری نیست. در ادامه دلیل آن را بررسی خواهیم کرد.
const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
function shortcodeToId(shortcode) {
let id = 0n;
for (const ch of shortcode) {
const v = ALPHABET.indexOf(ch);
if (v === -1) throw new Error(`not a shortcode character: ${ch}`);
id = id * 64n + BigInt(v);
}
return id.toString(); // نگهداری به عنوان رشته
}
function idToShortcode(mediaId) {
// همچنین شناسههایی مانند "3996242083173720380_528817151" را میپذیرد
let n = BigInt(String(mediaId).split("_")[0]);
let code = "";
while (n > 0n) {
code = ALPHABET[Number(n % 64n)] + code;
n /= 64n;
}
return code;
}
// استخراج شورتکد از لینک پست یا ریلز
function shortcodeFromUrl(url) {
const m = String(url).match(/instagram\.com\/(?:p|reels?|tv)\/([A-Za-z0-9_-]+)/);
return m ? m[1] : null;
}
shortcodeToId("Dd1gQBsCWE8"); // "3996242083173720380"
idToShortcode("3996242083173720380"); // "Dd1gQBsCWE8"

