Reports: Query

مهم: درخواست‌های API برای این روش اکنون نیاز به دسترسی به https://www.googleapis.com/auth/youtube.readonly دامنه دارند.

این روش به شما امکان می دهد بسیاری از گزارش های مختلف Analytics را بازیابی کنید. هر درخواست از پارامترهای پرس و جو برای تعیین شناسه کانال یا مالک محتوا، تاریخ شروع، تاریخ پایان و حداقل یک معیار استفاده می کند. همچنین می توانید پارامترهای پرس و جو اضافی مانند ابعاد، فیلترها و دستورالعمل های مرتب سازی را ارائه دهید.

  • معیارها اندازه‌گیری‌های فردی فعالیت کاربر، مانند بازدیدها یا رتبه‌بندی ویدیوها (پسندیدن و نپسندیدن) هستند.
  • ابعاد معیارهای رایجی هستند که برای جمع‌آوری داده‌ها استفاده می‌شوند، مانند تاریخی که فعالیت کاربر در آن اتفاق افتاده یا کشوری که کاربران در آن قرار داشته‌اند. در یک گزارش، هر ردیف از داده ها دارای ترکیبی منحصر به فرد از مقادیر ابعاد است.
  • فیلترها مقادیر ابعادی هستند که داده های بازیابی را مشخص می کنند. برای مثال، می‌توانید داده‌های یک کشور خاص، یک ویدیوی خاص یا گروهی از ویدیوها را بازیابی کنید.

توجه: گزارش‌های مالک محتوا فقط برای شرکای محتوای YouTube که در برنامه شریک YouTube شرکت می‌کنند قابل دسترسی است.

موارد استفاده رایج

درخواست

درخواست HTTP

GET https://youtubeanalytics.googleapis.com/v2/reports

همه درخواست‌های YouTube Analytics API باید مجاز باشند. راهنمای مجوز نحوه استفاده از پروتکل OAuth 2.0 برای بازیابی نشانه های مجوز را توضیح می دهد.

درخواست‌های YouTube Analytics API از حوزه‌های مجوز زیر استفاده می‌کنند:

محدوده ها
https://www.googleapis.com/auth/yt-analytics.readonly گزارش‌های YouTube Analytics را برای محتوای YouTube خود مشاهده کنید. این محدوده دسترسی به معیارهای فعالیت کاربر مانند تعداد بازدید و تعداد رتبه‌بندی را فراهم می‌کند.
https://www.googleapis.com/auth/yt-analytics-monetary.readonly گزارش های پولی YouTube Analytics را برای محتوای YouTube خود مشاهده کنید. این محدوده دسترسی به معیارهای فعالیت کاربر و معیارهای درآمد تخمینی و عملکرد تبلیغات را فراهم می کند.
https://www.googleapis.com/auth/youtube حساب YouTube خود را مدیریت کنید. در YouTube Analytics API، صاحبان کانال از این محدوده برای مدیریت گروه‌ها و موارد گروه YouTube Analytics استفاده می‌کنند.
https://www.googleapis.com/auth/youtubepartner دارایی‌های YouTube و محتوای مرتبط را در YouTube مشاهده و مدیریت کنید. در YouTube Analytics API، صاحبان محتوا از این محدوده برای مدیریت گروه‌ها و موارد گروه YouTube Analytics استفاده می‌کنند.

مولفه های

جداول زیر پارامترهای پرس و جوی مورد نیاز و اختیاری را برای درخواست های API برای بازیابی گزارش های پرس و جو فهرست می کند. پارامترهای پرس و جوی استاندارد فهرست شده در جدول نیز اختیاری هستند و توسط بسیاری از API های Google پشتیبانی می شوند.

مولفه های
پارامترهای مورد نیاز
endDate string
تاریخ پایان واکشی داده های YouTube Analytics . مقدار باید در قالب YYYY-MM-DD باشد.

پاسخ API حاوی داده‌هایی تا آخرین روز است که تمام معیارهای پرس‌وجو در زمان درخواست در دسترس هستند. بنابراین، برای مثال، اگر درخواست تاریخ پایان 5 ژوئیه 2017 را مشخص کند، و مقادیر برای همه معیارهای درخواستی فقط تا 3 ژوئیه 2017 در دسترس باشد، این آخرین تاریخی است که داده‌ها در پاسخ گنجانده شده است. (این درست است حتی اگر داده های برخی از معیارهای درخواستی برای 4 ژوئیه 2017 در دسترس باشد.)
توجه: در نسخه 1 API، این پارامتر نامگذاری شده است end-date .
ids string
کانال YouTube یا مالک محتوایی را که داده‌های YouTube Analytics برای آن بازیابی می‌کنید، شناسایی می‌کند.

  • برای درخواست داده برای یک کانال YouTube، مقدار پارامتر ids روی channel==MINE یا channel== CHANNEL_ID تنظیم کنید، جایی که CHANNEL_ID کانال یوتیوب کاربر تأیید شده فعلی را شناسایی می‌کند.
  • برای درخواست داده برای مالک محتوای YouTube، مقدار پارامتر ids روی contentOwner== OWNER_NAME تنظیم کنید، جایی که OWNER_NAME content owner ID برای کاربر است.

metrics string
فهرستی از معیارهای YouTube Analytics جدا شده با کاما، مانند views یا likes,dislikes . برای فهرستی از گزارش‌هایی که می‌توانید بازیابی کنید و معیارهای موجود در هر گزارش، به مستندات گزارش‌های کانال یا گزارش‌های مالک محتوا مراجعه کنید. (سند متریک شامل تعاریفی برای همه معیارها است.)
startDate string
تاریخ شروع واکشی داده های YouTube Analytics . مقدار باید در قالب YYYY-MM-DD باشد.
توجه: در نسخه 1 API، این پارامتر نامگذاری شده است start-date .
پارامترهای اختیاری
currency string
ارزی که API برای تعیین معیارهای درآمد تخمینی زیر استفاده می‌کند: برآورد درآمد ، تخمین زده درآمد ، تخمین زده شدهRedPartnerRevenue ، درآمد ناخالص ، cpm ، playbackBasedCpm . مقادیری که API برای این معیارها برمی‌گرداند، تخمین‌هایی هستند که با استفاده از نرخ‌های مبادله‌ای که به صورت روزانه تغییر می‌کنند محاسبه می‌شوند. اگر هیچ یک از آن معیارها درخواست نشود، پارامتر نادیده گرفته می شود.

مقدار پارامتر یک کد ارز سه حرفی ISO 4217 از لیست ارزهای زیر است. اگر ارز پشتیبانی‌نشده مشخص شده باشد، API یک خطا برمی‌گرداند. مقدار پیش فرض USD است.

dimensions string
فهرستی از ابعاد YouTube Analytics جدا شده با کاما، مانند video یا ageGroup,gender . برای فهرستی از گزارش‌هایی که می‌توانید بازیابی کنید و ابعاد استفاده‌شده برای آن گزارش‌ها، به مستندات گزارش‌های کانال یا گزارش‌های مالک محتوا مراجعه کنید. (سند ابعاد شامل تعاریفی برای همه ابعاد است.)
filters string
فهرستی از فیلترهایی که باید هنگام بازیابی داده های YouTube Analytics اعمال شوند. مستندات گزارش‌های کانال و گزارش‌های مالک محتوا ، ابعادی را که می‌توان برای فیلتر کردن هر گزارش استفاده کرد، مشخص می‌کند و سند ابعاد آن ابعاد را تعریف می‌کند.

اگر درخواستی از چندین فیلتر استفاده می کند، آنها را با یک نقطه ویرگول ( ; ) به یکدیگر بپیوندید و جدول نتیجه برگشتی هر دو فیلتر را برآورده می کند. به عنوان مثال، مقدار پارامتر filters video==dMH0bHeiRNg;country==IT فیلتر می‌کند که مجموعه نتایج را محدود می‌کند تا شامل داده‌های ویدیوی داده شده در ایتالیا باشد.

تعیین چندین مقدار برای یک فیلتر

API از توانایی تعیین چندین مقدار برای فیلترهای video ، playlist و channel پشتیبانی می کند. برای انجام این کار، یک لیست جدا از ویدیو، لیست پخش یا شناسه کانال مشخص کنید که پاسخ API باید فیلتر شود. به عنوان مثال، مقدار پارامتر video==pd1FJh59zxQ,Zhawgd0REhA;country==IT فیلتر filters کند تا مجموعه نتایج شامل داده های ویدیوهای داده شده در ایتالیا باشد. مقدار پارامتر می تواند تا 500 شناسه را مشخص کند.

هنگامی که چندین مقدار را برای یک فیلتر مشخص می کنید، می توانید آن فیلتر را به لیست ابعادی که برای درخواست تعیین می کنید نیز اضافه کنید. این درست است حتی اگر فیلتر به عنوان یک بعد پشتیبانی شده برای یک گزارش خاص فهرست نشده باشد. اگر فیلتر را به لیست ابعاد اضافه کنید، API نیز از مقادیر فیلتر برای گروه بندی نتایج استفاده می کند.

برای مثال، فرض کنید گزارش منبع ترافیک یک کانال را بازیابی می‌کنید، که آمار بازدید را بر اساس روشی که بینندگان به محتوای ویدیوی کانال رسیده‌اند، جمع‌آوری می‌کند. همچنین فرض کنید درخواست پارامتر filters درخواست شما فهرستی از 10 ویدیو را مشخص می کند که داده ها باید برای آنها بازگردانده شود.
  • اگر video به مقدار پارامتر dimensions اضافه کنید، پاسخ API آمار منبع ترافیک جداگانه ای را برای هر یک از 10 ویدیو ارائه می دهد.
  • اگر video به مقدار پارامتر dimensions اضافه نکنید، پاسخ API آمار منبع ترافیک را برای همه 10 ویدیو جمع‌آوری می‌کند.
includeHistoricalChannelData boolean
توجه: این پارامتر فقط برای گزارش‌های مالک محتوا اعمال می‌شود.

نشان می‌دهد که آیا پاسخ API باید شامل زمان تماشای کانال و داده‌های مشاهده از دوره زمانی قبل از پیوند کانال‌ها به مالک محتوا باشد یا خیر. مقدار پارامتر پیش‌فرض false است، به این معنی که پاسخ API فقط شامل زمان تماشا و داده‌های مشاهده از تاریخ‌هایی است که کانال‌ها به مالک محتوا پیوند داده شده‌اند.

مهم است به خاطر داشته باشید که کانال های مختلف ممکن است در تاریخ های مختلف به صاحب محتوا پیوند داده شده باشند. اگر درخواست API داده‌ها را برای چندین کانال بازیابی می‌کند و مقدار پارامتر false است، پاسخ API حاوی داده‌هایی بر اساس تاریخ پیوند برای هر کانال مربوطه است. اگر مقدار پارامتر true باشد، پاسخ API حاوی داده هایی است که با تاریخ های مشخص شده در درخواست API مطابقت دارند.
توجه: در نسخه 1 API، این پارامتر نامگذاری شده است include-historical-channel-data .
maxResults integer
حداکثر تعداد ردیف هایی که باید در پاسخ گنجانده شود.
توجه: در نسخه 1 API، این پارامتر نامگذاری شده است max-results
sort string
فهرستی از ابعاد یا معیارهای جدا شده با کاما که ترتیب مرتب‌سازی داده‌های YouTube Analytics را تعیین می‌کند. به طور پیش فرض ترتیب مرتب سازی صعودی است. پیشوند - باعث ترتیب مرتب سازی نزولی می شود.
startIndex integer
شاخص مبتنی بر 1 اولین موجودی که بازیابی می شود. (مقدار پیش فرض 1 است.) از این پارامتر به عنوان مکانیزم صفحه بندی به همراه پارامتر max-results استفاده کنید.
توجه: در نسخه 1 API، این پارامتر نامگذاری شده است start-index
پارامترهای استاندارد
access_token نشانه OAuth 2.0 برای کاربر فعلی.
alt این پارامتر در نسخه 2 API که فقط از پاسخ های JSON پشتیبانی می کند پشتیبانی نمی شود. قالب داده برای پاسخ API.
  • مقادیر معتبر: json ، csv
  • مقدار پیش فرض: json
callback عملکرد برگشت به تماس
  • نام تابع فراخوانی جاوا اسکریپت که پاسخ را مدیریت می کند.
  • در درخواست های جاوا اسکریپت JSON-P استفاده می شود.
prettyPrint

پاسخ را با تورفتگی و شکستگی برمی‌گرداند.

  • اگر true ، پاسخ را در قالبی قابل خواندن برای انسان برمی‌گرداند.
  • مقدار پیش فرض: true .
  • هنگامی که این false است، می تواند اندازه بار پاسخ را کاهش دهد، که ممکن است منجر به عملکرد بهتر در برخی از محیط ها شود.
quotaUser این پارامتر در نسخه 1 API پشتیبانی می شد که اکنون منسوخ شده است. این پارامتر در نسخه 2 API پشتیبانی نمی شود.
userIp این پارامتر در نسخه 1 API پشتیبانی می شد که اکنون منسوخ شده است. این پارامتر در نسخه 2 API پشتیبانی نمی شود.

درخواست بدن

هنگام فراخوانی این روش، یک بدنه درخواست ارسال نکنید.

واکنش

همانطور که در تعریف پارامتر alt اشاره شد، API می تواند پاسخ ها را در قالب JSON یا CSV برگرداند. اطلاعات مربوط به بدنه پاسخ برای هر نوع در زیر نشان داده شده است:

JSON
{
  "kind": "youtubeAnalytics#resultTable",
  "columnHeaders": [
    {
      "name": string,
      "dataType": string,
      "columnType": string
    },
    ... more headers ...
  ],
  "rows": [
    [
      {value}, {value}, ...
    ]
  ]
}
خواص
kind string
این مقدار نوع داده های موجود در پاسخ API را مشخص می کند. برای روش query ، مقدار ویژگی kind youtubeAnalytics#resultTable خواهد بود. با این حال، اگر API پشتیبانی از روش‌های دیگر را اضافه کند، پاسخ‌های API برای آن روش‌ها ممکن است مقادیر ویژگی‌های kind دیگری را معرفی کنند.
columnHeaders[] list
این مقدار اطلاعات مربوط به داده های بازگردانده شده در فیلدهای rows را مشخص می کند. هر مورد در لیست columnHeaders ، فیلدی را که در مقدار rows بازگردانده شده است، مشخص می‌کند که حاوی لیستی از داده‌های محدود شده با کاما است.

فهرست columnHeaders با ابعاد مشخص‌شده در درخواست API شروع می‌شود که با معیارهای مشخص‌شده در درخواست API دنبال می‌شود. ترتیب ابعاد و معیارها با ترتیب در درخواست API مطابقت دارد.

به عنوان مثال، اگر درخواست API شامل پارامترهای dimensions=ageGroup,gender&metrics=viewerPercentage ، پاسخ API ستون‌ها را به ترتیب برمی‌گرداند: ageGroup ، gender ، viewerPercentage .
columnHeaders[]. name string
نام بعد یا متریک.
columnHeaders[]. columnType string
نوع ستون ( DIMENSION یا METRIC ).
columnHeaders[]. dataType string
نوع داده در ستون ( STRING ، INTEGER ، FLOAT و غیره).
rows[] list
لیست شامل تمام ردیف های جدول نتیجه است. هر آیتم در لیست آرایه ای است که حاوی داده های محدود شده با کاما مربوط به یک ردیف از داده ها است. ترتیب فیلدهای داده محدود شده با کاما با ترتیب ستون های فهرست شده در قسمت columnHeaders مطابقت دارد.

اگر هیچ داده ای برای پرس و جو داده شده در دسترس نباشد، عنصر rows از پاسخ حذف می شود.

پاسخ درخواستی با بعد day حاوی ردیف‌هایی برای روزهای اخیر نخواهد بود.

CSV
day, views, likes, ...
"2012-01-01", 12.0, 3, ...
"2012-01-02", 16.0, 2, ...
"2012-01-03", 18.0, 8, ...
...

مثال ها

توجه: نمونه کد زیر ممکن است نشان دهنده همه زبان های برنامه نویسی پشتیبانی شده نباشد. برای فهرستی از زبان های پشتیبانی شده، به مستندات کتابخانه های سرویس گیرنده مراجعه کنید.

جاوا اسکریپت

این مثال YouTube Analytics API را برای بازیابی بازدیدهای روزانه و سایر معیارهای کانال کاربر مجاز برای سال تقویم 2017 فراخوانی می‌کند. نمونه از کتابخانه سرویس گیرنده Google APIs JavaScript استفاده می کند.

قبل از اجرای این نمونه به صورت محلی برای اولین بار، باید اعتبارنامه مجوز را برای پروژه خود تنظیم کنید:
  1. پروژه ای را در Google API Console ایجاد یا انتخاب کنید.
  2. YouTube Analytics API را برای پروژه خود فعال کنید.
  3. در بالای صفحه اعتبارنامه ، برگه صفحه رضایت OAuth را انتخاب کنید. یک آدرس ایمیل انتخاب کنید، نام محصول را در صورتی که قبلا تنظیم نشده است وارد کنید و روی دکمه ذخیره کلیک کنید.
  4. در صفحه Credentials ، روی دکمه Create credentials کلیک کنید و Oauth client ID را انتخاب کنید.
  5. نوع برنامه کاربردی Web application را انتخاب کنید.
  6. در قسمت Authorized JavaScript origins، URL را وارد کنید که نمونه کد را از آن ارائه خواهید کرد. برای مثال، می‌توانید از چیزی مانند http://localhost:8000 یا http://yourserver.example.com استفاده کنید. می توانید قسمت Authorized Redirect URIs را خالی بگذارید.
  7. روی دکمه Create کلیک کنید تا ایجاد اعتبارنامه شما به پایان برسد.
  8. قبل از بستن کادر محاوره ای، شناسه مشتری را کپی کنید، که باید آن را در نمونه کد قرار دهید.

سپس، نمونه را در یک فایل محلی ذخیره کنید. در نمونه، خط زیر را بیابید و YOUR_CLIENT_ID با شناسه مشتری که هنگام تنظیم اعتبار مجوز خود به دست آوردید جایگزین کنید.

gapi.auth2.init({client_id: 'YOUR_CLIENT_ID'});

اکنون، شما برای آزمایش نمونه آماده هستید:

  1. فایل محلی را از یک مرورگر وب باز کنید و کنسول اشکال زدایی را در مرورگر باز کنید. شما باید صفحه ای را ببینید که دو دکمه را نمایش می دهد.
  2. برای راه اندازی جریان مجوز کاربر، روی دکمه مجوز و بارگذاری کلیک کنید. اگر به برنامه اجازه بازیابی داده های کانال خود را بدهید، باید خطوط زیر را روی کنسول در مرورگر مشاهده کنید:
    Sign-in successful
    GAPI client loaded for API
  3. اگر به جای خطوط بالا پیام خطا مشاهده کردید، تأیید کنید که اسکریپت را از URI تغییر مسیر مجاز که برای پروژه خود تنظیم کرده اید بارگیری می کنید و شناسه مشتری خود را همانطور که در بالا توضیح داده شد در کد قرار داده اید.
  4. برای فراخوانی API روی دکمه اجرا کلیک کنید. در مرورگر باید یک شیء response را در کنسول مشاهده کنید. در آن شیء، ویژگی result به یک شی نگاشت می شود که حاوی داده های API است.
<script src="https://apis.google.com/js/api.js"></script>
<script>
  function authenticate() {
    return gapi.auth2.getAuthInstance()
        .signIn({scope: "https://www.googleapis.com/auth/yt-analytics.readonly"})
        .then(function() { console.log("Sign-in successful"); },
              function(err) { console.error("Error signing in", err); });
  }
  function loadClient() {
    return gapi.client.load("https://youtubeanalytics.googleapis.com/$discovery/rest?version=v2")
        .then(function() { console.log("GAPI client loaded for API"); },
              function(err) { console.error("Error loading GAPI client for API", err); });
  }
  // Make sure the client is loaded and sign-in is complete before calling this method.
  function execute() {
    return gapi.client.youtubeAnalytics.reports.query({
      "ids": "channel==MINE",
      "startDate": "2017-01-01",
      "endDate": "2017-12-31",
      "metrics": "views,estimatedMinutesWatched,averageViewDuration,averageViewPercentage,subscribersGained",
      "dimensions": "day",
      "sort": "day"
    })
        .then(function(response) {
                // Handle the results here (response.result has the parsed body).
                console.log("Response", response);
              },
              function(err) { console.error("Execute error", err); });
  }
  gapi.load("client:auth2", function() {
    gapi.auth2.init({client_id: 'YOUR_CLIENT_ID'});
  });
</script>
<button onclick="authenticate().then(loadClient)">authorize and load</button>
<button onclick="execute()">execute</button>

پایتون

این مثال YouTube Analytics API را برای بازیابی بازدیدهای روزانه و سایر معیارهای کانال کاربر مجاز برای سال تقویم 2017 فراخوانی می‌کند. نمونه از کتابخانه سرویس گیرنده Google APIs Python استفاده می کند.

قبل از اجرای این نمونه به صورت محلی برای اولین بار، باید اعتبارنامه مجوز را برای پروژه خود تنظیم کنید:
  1. پروژه ای را در Google API Console ایجاد یا انتخاب کنید.
  2. YouTube Analytics API را برای پروژه خود فعال کنید.
  3. در بالای صفحه اعتبارنامه ، برگه صفحه رضایت OAuth را انتخاب کنید. یک آدرس ایمیل انتخاب کنید، نام محصول را در صورتی که قبلا تنظیم نشده است وارد کنید و روی دکمه ذخیره کلیک کنید.
  4. در صفحه Credentials ، روی دکمه Create credentials کلیک کنید و Oauth client ID را انتخاب کنید.
  5. نوع برنامه دیگر را انتخاب کنید، نام "YouTube Analytics API Quickstart" را وارد کنید و روی دکمه ایجاد کلیک کنید.
  6. برای رد کردن گفتگوی به دست آمده، روی OK کلیک کنید.
  7. روی دکمه (دانلود JSON) در سمت راست شناسه مشتری کلیک کنید.
  8. فایل دانلود شده را به دایرکتوری کاری خود منتقل کنید.

همچنین باید Google APIs Client Library را برای Python و چند کتابخانه اضافی نصب کنید:

pip install --upgrade google-api-python-client
pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2

اکنون، شما برای آزمایش نمونه آماده هستید:

  1. نمونه کد زیر را در پوشه کاری خود کپی کنید.
  2. در نمونه، مقدار متغیر CLIENT_SECRETS_FILE را به‌روزرسانی کنید تا با مکان فایلی که پس از تنظیم اعتبار مجوز دانلود کرده‌اید مطابقت داشته باشد.
  3. کد نمونه را در یک پنجره ترمینال اجرا کنید:
    python yt_analytics_v2.py
  4. از جریان مجوز عبور کنید. ممکن است جریان احراز هویت به طور خودکار در مرورگر شما بارگیری شود، یا ممکن است لازم باشد URL احراز هویت را در پنجره مرورگر کپی کنید. در پایان جریان مجوز، در صورت لزوم، کد مجوز نمایش داده شده در مرورگر را در پنجره ترمینال خود قرار دهید و روی [بازگشت] کلیک کنید.
  5. کوئری API اجرا می شود و پاسخ JSON به پنجره ترمینال خروجی می شود.
# -*- coding: utf-8 -*-

import os
import google.oauth2.credentials
import google_auth_oauthlib.flow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow

SCOPES = ['https://www.googleapis.com/auth/yt-analytics.readonly']

API_SERVICE_NAME = 'youtubeAnalytics'
API_VERSION = 'v2'
CLIENT_SECRETS_FILE = 'YOUR_CLIENT_SECRET_FILE.json'
def get_service():
  flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
  credentials = flow.run_console()
  return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)

def execute_api_request(client_library_function, **kwargs):
  response = client_library_function(
    **kwargs
  ).execute()

  print(response)

if __name__ == '__main__':
  # Disable OAuthlib's HTTPs verification when running locally.
  # *DO NOT* leave this option enabled when running in production.
  os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'

  youtubeAnalytics = get_service()
  execute_api_request(
      youtubeAnalytics.reports().query,
      ids='channel==MINE',
      startDate='2017-01-01',
      endDate='2017-12-31',
      metrics='estimatedMinutesWatched,views,likes,subscribersGained'
      dimensions='day',
      sort='day'
  )

آن را امتحان کنید!

از APIs Explorer برای فراخوانی این API و مشاهده درخواست و پاسخ API استفاده کنید.