Airbnb API: كيفية استخدام Mashvisor API للحصول على بيانات Airbnb

إن Mashvisor API هي أداة تحليل عقارات تقدم أكثر من مجرد الحقائق الأساسية حول الخصائص الحالية أو المحتملة. يمكن أن يوفر Mashvisor البيانات ، باستخدام خوارزميات الاستدلال الإحصائي ، التي يمكن أن تمنع شخصًا من القيام باستثمار عقاري سيئ عندما يتعلق الأمر بـ Airbnb أو الاستئجار التقليدي.

يحتوي API على فئتين رئيسيتين:

  • الإيجارات قصيرة الأجل (Airbnb) أو قوائم تأجير الإجازات
  • الإيجارات طويلة الأجل ("التقليدية")

يمكن أن توفر واجهة برمجة التطبيقات معلومات تفصيلية حول خصائص Airbnb المحددة شهريًا ، بما في ذلك ؛

تنقسم نقاط النهاية إلى فئات مثل الملكية ، ومعدلات الإيجار ، والاتجاهات ، والنتائج التنبؤية ، وما إلى ذلك. يمكن لشخص ما أن يبحث عن اتجاهات السوق العامة في منطقة ما أو صفر في خاصية Airbnb. قد تتساءل لماذا لا نستخدم واجهة برمجة تطبيقات Airbnb للحصول على قوائم عقارات محددة لأن هذا هو ما نبحث عنه.

لماذا لا تستخدم فقط واجهة برمجة تطبيقات Airbnb؟

"في الوقت الحالي ، لا نقبل طلبات وصول جديدة لواجهة برمجة التطبيقات لدينا. سيتواصل فريقنا العالمي من مديري الشركاء مع الشركاء المحتملين استنادًا إلى فرصة التوريد التي يمثلها نشاطك التجاري ، وقوة التكنولوجيا الخاصة بك ، والقدرة على دعم عملائنا المشتركين. " موقع Airbnb

إذا كنا ننشئ تطبيقًا للمستخدمين يسمح لهم بتنفيذ الإجراءات (أي تحديث القوائم) ، فإننا نود الحصول على وصول مباشر إلى واجهة برمجة تطبيقات Airbnb. من المرجح أن يأتي هذا الوصول من خلال طرف ثالث غير Airbnb.

قبل بناء مشروع ، سيكون من المفيد أن تعرف بالضبط نوع البيانات التي تحتاجها للأسئلة التي تحاول الإجابة عليها. يمكن أن تحصل المعلومات التي نحصل عليها من Mashvisor API على:

  • أبلغ مضيفي Airbnb المحتملين عما إذا كانوا يتخذون قرارًا جيدًا أو سيئًا للإدراج في منطقتهم
  • ساعد المسافرين على تحديد ما إذا كان من الاقتصادي استخدام Airbnb أو مزودي تأجير آخرين

Mashvisor في الغالب تحليلي وإعلامي ولا يقوم بإجراءات للمستخدمين على حسابهم.

هناك العديد من الخيارات مع واجهة برمجة التطبيقات هذه ، لكنني سأناقش أولاً كيفية استخدامها. ثم سنكون أحرارًا في الحصول على الإحصاءات التي نريد أن نساعدها نحن (أو مستخدمينا) في اتخاذ قرارات عقارية قائمة على البيانات.

كيفية استخدام Mashvisor API للحصول على بيانات Airbnb

سنحتاج إلى حساب مع RapidAPI واشتراك لاستخدام واجهة برمجة تطبيقات Mashvisor (راجع وثائق واجهة برمجة التطبيقات هنا).

حدد الاشتراك الأساسي الذي يمنحنا مائة مكالمة API شهريًا. بعد أول مائة ، سيكلف 0.10 دولار لكل طلب. تذكر أنه يمكننا دائمًا عرض استخدامنا وإدارته على لوحة معلومات مطوري RapidAPI. لا يجب أن تقترب من حصتك في المثال لاحقًا ، ولكن إذا كنت تشعر أنك تقترب ، جهز لوحة القيادة.

مع مائة فقط في الشهر ، نحتاج إلى أن نكون أذكياء بشأن كيفية انتزاع البيانات ومقدار تلك البيانات التي نلتقطها في كل مرة. سنجد معلومات مفيدة في صفحة API. في RapidAPI ، ابحث عن "Mashvisor" وحدد الخيار بعد إرساله.

يسرد القسم الأيسر طلبات HTTP التي يمكننا إجراؤها. إذا حددنا نوع الطلب ، فسيعرض لنا القسم الأوسط المعلمات الاختيارية والمطلوبة لهذا الطلب.

في الجزء العلوي من الجزء الأوسط ، ستلاحظ وصفًا موجزًا ​​لكل نقطة نهاية.

إن معلمات القسم الأوسط هي في الواقع مدخلات ، وإذا قمنا بتغيير تلك المدخلات ، فإن مقتطفات الشفرة في القسم الصحيح ستتغير أيضًا! يحتوي القسم الصحيح أيضًا على نماذج من الردود حتى نتمكن من تقييم البيانات التي سنتلقىها من نقطة النهاية.

في الجزء العلوي من القسم الأيمن ، توجد قائمة منسدلة حيث يمكننا تحديد لغات مختلفة ومكتبات مختلفة داخل تلك اللغة. تبرز قصاصات التعليمات البرمجية بسبب الألوان المضافة الخاصة باللغة. سنستخدم أداة إنشاء المقتطفات هذه لتطبيق سطر أوامر NodeJS.

أينما ترى "تأجير قصير الأجل" ، معظم الوقت ، فهذا يعني Airbnb.

لدى Mashvisor بعض الدرجات التنبؤية ، التي يتم إنشاؤها باستخدام خوارزميات خاصة بهم ، والتي تشمل:

  • Mashmeter
  • مقترح الملكية
  • احتمالية الاستثمار

من بين هذه ، سنستخدم فقط جهاز Mashmeter في المثال الموصوف على النحو التالي:

نتيجة تصميم Mashvisor فريدة تظهر تقييمًا شاملاً لفرصة الاستثمار في الجوار كنسبة مئوية.

يمكنك قراءة المزيد عن أي من هذه النتائج في صفحة لوحة معلومات واجهة برمجة تطبيقات Mashvisor.

آمل أن تكون متحمسًا لإنشاء تطبيق سطر أوامر NodeJS الذي سيتيح لنا إنشاء تقارير استثمارية شخصية بناءً على منطقتنا المحلية!

مثال للتطبيق: هل يجب أن أستأجر بشكل تقليدي أو أذكر على Airbnb؟

يوفر Mashvisor معلومات تحليلية مفيدة ، لذلك سنقوم ببناء واجهة سطر أوامر باستخدام NodeJS التي ستجمع إحصاءات للمساعدة في الإجابة على السؤال ، "بناءً على الحي الذي أعيش فيه ، هل يجب أن أقوم باستئجار قصير المدى باستخدام Airbnb أو تقليديًا؟ " . سيصل التطبيق إلى نقطتي نهاية فقط ولكن يمكن توسيعه لإخراج أنواع متعددة من التقارير.

ستستخدم مكتبات npm الشهيرة مثل Yargs و Axios و Chalk. سيستخدم أدوات NodeJS مثل التدمير ، عدم التزامن / انتظار ، كتل المحاولة / الالتقاط ، والحروف الوترية.

آمل أن يلهمك ذلك لبناء شيء أكبر وأفضل ، لذا فلنبدأ!

المتطلبات الأساسية

  • ستحتاج إلى بعض الإلمام بكيفية فتح أداة سطر الأوامر واستخدامها.
  • الفهم الأساسي لـ NodeJS أو JavaScript
  • ستحتاج إلى أحد أحدث إصدارات العقدة. أنا أستخدم 10.16 وإصدار حديث من npm مثبت. أنا أستخدم 6.13.0 ، ولكن من الجيد أن يكون لديك 5.6 على الأقل.
  • اتصال بالإنترنت.
  • سأستخدم أداة سطر أوامر UNIX bash على نظام macOS. ومع ذلك ، يمكن تثبيت سطر الأوامر هذا على Windows 10.
  • حساب RapidAPI واشتراك أساسي (مجاني) في واجهة برمجة تطبيقات Mashvisor.

انشاء المشروع

  1. افتح نافذة طرفية جديدة (شريط Command-Space ، ثم ابحث عن "Terminal" في نظام Mac).
  2. انتقل إلى دليل منطقي باستخدام الأمر cd. لمعرفة الدلائل الموجودة أسفل الدليل الحالي ، أدخل القرص المضغوط ثم اضغط على Tab مرتين. سيتم عرض خيارات الدليل. الآن ، يمكن تشغيل الأوامر التي تتبع هذا التنسيق -> cd lower_directory / directory_below_that_that.
  3. إنشاء دليل جديد باستخدام الأمر mkdir [name_of_directory]
  4. مؤتمر نزع السلاح في هذا الدليل. يمكنك التحقق للتأكد من أنك في المكان الصحيح عن طريق تشغيل pwd. هذا يشير إلى دليل عمل الطباعة.
  5. تهيئة وحدة npm جديدة عن طريق تشغيل npm init -y. إذا تم تشغيل الأمر بدون -y ، فسيتم عرض الأسئلة التي ستطلب منك وصف وتعريف جوانب وحدة npm الجديدة. هذا ليس ضروريًا لهذا البرنامج التعليمي وتشغيل الأمر باستخدام العلامة -y يتخطى هذه العملية. احتفظ بهذه الوحدة الطرفية مفتوحة لأننا سنقوم بتثبيت حزم npm لاحقًا ، وتشغيل الأوامر من دليل مشروع الجذر.
  6. افتح دليل المشروع في محرر الكود الذي تختاره. أنا أستخدم Visual Studio Code لذا سأقوم بتنفيذ الأمر الذي يفتح VSCode في الدليل الذي أنا فيه حاليًا.

لدينا الآن مشروع NodeJS جديد للعمل معه.

فهم وسيطات سطر الأوامر

سيعمل هذا المشروع على إنشاء تقارير تستند إلى البيانات التي تم إرجاعها بواسطة واجهة برمجة تطبيقات Mashvisor. نريد القدرة على تخزين تلك البيانات. هذا يعني أننا بحاجة إلى أوامر الإضافة والعرض والإدراج والإزالة. سنستخدم مكتبة Yargs للقيام بذلك في مشروعنا ، ولكن أولاً ، نحن بحاجة إلى فهم أكثر قليلاً لكيفية تمرير الحجج بأوامرنا.

  1. قم بإنشاء ملف باسم cli.js في دليل المشروع.
  2. أدخل الكود console.log (process.argv)
  3. أدخل الأمر التالي في النهاية الطرفية: node cli.js "test". يجب أن تكون هناك قائمة معروضة مع بعض العناصر. يجب أن يكون "اختبار" أحد تلك العناصر. ينفّذ الأمر الذي قمنا بتشغيله الملف cli.js باستخدام NodeJS ويخزن الوسيطة التي نقدمها لها في صفيف يمكننا الوصول إليه في الملف. هذه هي الطريقة التي سنمرر بها البيانات إلى مشروعنا.

ومع ذلك ، يمكن أن يكون الوصول إلى هذا المتغير فوضويًا. سيبدو شيئًا مثل process.argv [2]. لحسن الحظ ، توجد مكتبة npm تقوم بإرفاق هذه الوسيطات بكائن ما وتعطينا القدرة على بناء أوامر بناءً على هذه الوسيطات: Yargs.

4. عد إلى المحطة وقم بتثبيت Yargs مع الأمر npm install yargs - حفظ.

5. في cli.js نحتاج إلى استيراد الوحدة النمطية الجديدة الخاصة بنا وتحليل الكائن الجديد. أضف الكود أدناه إلى هذا الملف.

6. أدخل العقدة cli.js --argument = "test". يجب أن ترى أول وسيطة مسجلة لدينا وكائن جديد له مفتاح "وسيطة" وقيمة "اختبار"

بناء أوامرنا

  1. إنشاء دليل جديد في جذر مشروعنا ، كمدس.
  2. قم بإنشاء دليل آخر داخل هذا report_cmds.
  3. قم بإنشاء ملف add.js داخل Reports_cmds.

يمكن أن نضع كل أوامرنا في نفس الملف ، لكن ذلك قد يصبح فوضويًا. بدلاً من ذلك ، سنقوم بإنشاء تطبيقنا مع كل أمر يحتوي على ملف خاص به.

4. أضف العناصر التالية إلى add.js.

exports.command = 'add' // command name sources.desc = 'إضافة تقرير جديد' // وصف الأمر export.builder = {} // إنشاء ووصف الوسائط Export.handler = function (argv) {console.log ("إضافة تقرير جديد") // تعمل عند استدعاء الأمر}

في هذا الملف نقوم بتصدير خصائص الأمر 'add'.

  • الأمر: بناء جملة الأمر
  • desc: وصف ما يفعله الأمر
  • البناء: وصف الحجج التي يقبلها أمرنا
  • معالج: وظيفة للتشغيل عند إصدار الأمر.

إذا قمنا بتشغيل أمر مثل node cli.js add فإننا نتوقع تشغيل هذا. لن يعمل هذا على الرغم من أن Yargs غير مدرك لدليل الأوامر الخاص بنا. نحن بحاجة إلى إجراء بعض التغييرات حتى يمكن العثور عليها.

5. في cli.js ، استبدل الرمز الموجود لدينا بالرمز أدناه ؛

يتطلب ('yargs') .commandDir ('cmds') // يجد دليل الأوامر .demandCommand () .help () // يسمح لنا باستخدام الأمر help .argv // يوزع الوسيطات

قد يكون هذا مربكًا للنظر ، لكننا نبني وحدة قيادة تسمح لنا ببناء أوامر معقدة. إذا كنت تريد سحب المزيد من السياق لبنية الكود هذه من وثائق yargs.

6. قم بإنشاء ملف في دليل cmds / الدليل الذي يدعى التقارير. js. سيبدو هذا الملف مثل cli.js.

// Reports.js
sources.command = 'التقارير 'export.desc =' إدارة التقارير 'export.builder = function (yargs) {return yargs.commandDir (' report_cmds ') // locate report commands} export.handler = function (argv) {}

ستلاحظ أن الأمر في هذا الملف يبدو مختلفًا قليلاً. بناء الجملة عنصر نائب يشير إلى أن الحجة إلزامية. إذا كان الأمر اختياريًا ، فسيتم التفافه في [].

7. في المحطة ، لا يزال ، في جذر دليلنا ، أصدر مساعدة عقدة الأمر cli.js

الأوامر: تقارير cli.js إدارة التقارير
الخيارات: - نسخة إظهار رقم الإصدار [منطقي] - مساعدة إظهار المساعدة [منطقية]

يجب أن ترى وصفا لأمرنا (من التقارير. js) بالإضافة إلى الخيارات الأخرى. حاول مرة أخرى ، ولكن هذه المرة أدخل مساعدة العقدة cli.js تقارير.

يجب أن ترى أمر الإضافة مع الوصف الخاص به.

الأوامر: إضافة تقارير cli.js لإضافة تقرير جديد

8. مرة أخرى في add.js ، نحتاج إلى إعداد الحجج التي سنمررها كمعلمات لاستدعاء API. سيبدو الأمر هكذا:

هذا يعني أن الأمر add يأخذ ثلاث وسيطات مطلوبة. سيتم استخدام كائن export.builder لوصف الوسيطة ، ووضع علامة عليها على أنها مطلوبة أم لا ، وتفصيل نوع الوسيطة (سلسلة ، رقم ، إلخ).

// add.js
... exports.builder = {name: {description: 'Report name.'، requestOption: true، // يجعلها مطلوبة نوع: 'string' // معرف الكائن} ، ... ...

9. أضف الكود أدناه لإضافة add.js

export.command = 'add 'export.desc =' إضافة تقرير جديد 'export.builder = {name: {description:' Report name. '، requestOption: true، type:' string '}، الموقع: {description:' Mashvisor Neighborhood ID لسحب البيانات for. '، requestOption: true، type:' number '}، state: {description:' State to pull data for. '، requestOption: true، type:' string '}،} export.handler = function (argv) { console.log ("يضيف التقرير")}

هذا هو أمرنا الحقيقي الأول. يستغرق ثلاث حجج. ليس لديها وظيفة للتشغيل عند استدعاؤها لكنها ستعمل قريبا.

10. تشغيل تقارير عقدة cli.js تساعد وتعرض أمر الإضافة مع الحجج والوصف. علاوة على ذلك ، يمكنك تشغيل تقارير عقدة cli.js التي ستضيف ، والتي ستفشل ، ولكنها ستعرض الأوصاف وأنواع الحجج التي يحتاجها الأمر.

11. الملفات الخاصة بأوامر القائمة والعرض والإزالة متشابهة للغاية. من أجل الوقت ، قم بإنشاء كل ملف في report_cmds / directory (list.js ، remove.js ، view.js) وأضف الشفرة المقابلة لتلك الملفات.

// list.js
exports.command = 'list' exports.desc = 'List all report' export.handler = () => {console.log ('List all عناوين report')}}
راجع الرمز بالكامل على https://rapidapi.com/blog/mashvisor-api-airbnb-data/

إنشاء معالجات الوظائف الأساسية

يحتوي كل أمر على معالج. هذه وظيفة يتم استدعاؤها عند إصدار الأمر. نحتاج إلى إنشاء تلك الوظائف ، ولكننا سنقوم بذلك في ملف منفصل.

  1. إنشاء ملف Reports.js في الدليل الجذر للمشروع.
  2. في هذا الملف ، سيكون لدينا وظائف لأوامرنا. نحتاج إلى تصدير تلك الوظائف من الملف.
const listReports = () => {// قوائم عناوين التقارير}
const addReport = async (name، Neighbourhood) => {// يضيف تقريرًا}
const viewReport = (name) => {// print data data}
const removeReport = (name) => {// يزيل التقرير من التقارير. json}
module.exports = {addReport، removeReport، listReports، viewReport ،}

سيتم تخزين بيانات تقريرنا كقائمة في ملف محلي. هذا هو المكان الذي سنقوم بقراءة بيانات التقرير وحفظها وتحميلها وإزالتها منها.

3. قم بإنشاء الملف Reports.json في جذر الدليل وضع قائمة فيه تحتوي على كائن مثال [{"name": "test"، "location": 54678}]

سنحتاج إلى وظيفتين مساعدتين تقومان بتحميل التقارير من التقارير. json وواحدة تحفظ التقارير مرة أخرى في هذا الملف. سنفعل ذلك باستخدام وحدة fs المضمنة من NodeJS. سنحتاج إلى طلبها في أعلى Reports.js.

4. قم بإضافة هذا الكود إلى أعلى Reports.js.

const fs = مطلوب ('fs')
const loadReports = () => {try {let ReportsBuffer = fs.readFileSync ('./ Reports.json')؛ // find and download file let ReportsJson = التقاريرBuffer.toString ()؛ // convert buffer to string return JSON.parse (التقاريرJson) ؛ // parse string to object} catch (e) {return []؛ }}
const saveReports = (تقارير) => {const dataJson = JSON.stringify (تقارير) ؛ fs.writeFileSync ('Reports.json'، dataJson)؛ } ...

5. الآن يمكننا إنشاء وظيفة القائمة. هذه وظيفة بسيطة تستحوذ على التقارير ، ثم تطبع عناوين التقارير على وحدة التحكم. سنقوم بتوابلها مع مكتبة الطباشير. تثبيت مكتبة الطباشير مع npm تثبيت الطباشير - حفظ

يضيف الطباشير اللون إلى إخراج وحدة التحكم. يمكنك قراءة المزيد عن الطباشير على صفحة npm الخاصة بها.

6. قم بإنهاء وظيفة القائمة في Reports.js واستيراد Chalk في أعلى الملف

const chalk = مطلوب ('chalk') ... const listReports = () => {const Reports = loadReports () ؛ Reports.map ((report، i) => {console.warn (chalk.white.bgBlue (`$ {report.name}`))}})} ...

نحن جاهزون تقريبًا لاختبار أمرنا الأول ، لكننا لم نقم بتضمين هذه الوظيفة في ملف أوامر list.js.

7. في list.js استبدل console.log ("سرد جميع عناوين التقارير") بـ التقارير. listReports () وأعلى الملف أضِف ؛

تقارير التقارير = تتطلب ("../../ تقارير") ؛

8. تشغيل قائمة تقارير عقدة cli.js. يجب أن ترى اسم تقريرنا ، وفقط ، يتم طباعة التقرير إلى وحدة التحكم بخلفية زرقاء.

بعد ذلك ، دعنا نتولى أمر الإزالة بسرعة. تأخذ هذه الوظيفة اسمًا (اسم التقرير) ثم تقوم بإزالته من قائمة التقارير الموجودة في Reports.json. يقوم بإزالته بمجرد عدم حفظه مرة أخرى في الملف مع بقية التقارير بعد تصفيته.

9. أضف هذا الكود إلى وظيفة الإزالة في Reports.js

... const removeReport = (name) => {try {const Reports = loadReports ()؛ // تحميل التقارير في السماح newReports = Reports.filter (report => report.name! == name) ؛ // عامل التصفية للحصول على التقارير التي لا تتطابق مع الاسم إذا (Reports.length> newReports.length) {saveReports (newReports) ؛ // حفظ قائمة التقارير الجديدة في ملف console.log (chalk.green.inverse ('تم إزالة التقرير!'))} آخر {console.log (chalk.red.inverse ('Report not found'))؛ }} catch (e) {return e}} ...

10. قم بإضافة الوظيفة إلى remove.js بدلاً من console.log (...) واستيراد كائن التقارير.

// remove.js
تقارير التقارير = تتطلب ('../../ تقارير') ... ... export.handler = function (argv) {التقارير.RemoveReport (argv.name)}

لاحظ أننا نقوم بتمرير وسيطة الاسم إلى الدالة عبر كائن argv. داخل هذا الكائن سيكون هناك الخاصية "name" التي تحتوي على القيمة التي تم تمريرها من سطر الأوامر.

لقد حان الوقت أخيرًا لإنشاء أمر إضافة يقوم باسترداد بيانات Airbnb والعقارات التقليدية من واجهة برمجة تطبيقات Mashvisor.

جلب البيانات من Mashvisor (تكامل واجهة برمجة تطبيقات Airbnb)

الأمر add ؛

  • الحصول على البيانات من Mashvisor
  • حدد البيانات التي نريد الاحتفاظ بها
  • احفظ هذه البيانات في Reports.json

سنقوم بإنشاء مكالمات HTTP الخاصة بنا في ملف منفصل مع Axios. تأكد من أنك لا تزال في جذر دليل المشروع.

2. قم بإنشاء ملف api.js في جذر المشروع. في هذا الملف ، قم باستيراد المحاور وأضف الكود التالي بحيث يبدو الملف كما يلي:

axios = تتطلب ('axios')
const سبيل المثال = axios.create ({timeout: 1000، headers: {// headers وأضاف هنا سيتم تطبيقها على جميع "المثيلات" // أدناه في module.exports}}) ؛
module.exports = {الاستخدام: {// سنضيف مكالمات واجهة برمجة التطبيقات لدينا هنا getNe NeighborhoodOverview: (city، state) => مثيل ({})} ، airbnb: {// airbnb api calls here} ، تقليدي: {/ / مكالمات واجهة برمجة التطبيقات التقليدية هنا}}
راجع الرمز بالكامل على https://rapidapi.com/blog/mashvisor-api-airbnb-data/

يمكننا إنشاء جميع مكالمات API الخاصة بنا في ملف واحد وتصديرها كوظائف ملحقة بكائنات مختلفة. لاحظ أننا نقوم بإنشاء دالة على كائن مستخدم يسمى "getNe NeighborhoodOverview" ونقوم بتمريرها اثنين من وسيطات سطر الأوامر لدينا "NeighborhoodId" و "state".

يساعد هذا في تنظيم الكود الخاص بنا ويسمح لنا بإنشاء مثيل من Axios بسهولة يخزن الرؤوس التي نحتاجها لكل طلب.

لسوء الحظ ، لا يمكنني الدخول في تفاصيل حول مكتبة ومثيلات Axios ، ولكن يمكنك القراءة عنها هنا.

3. في المتصفح ، انتقل إلى Mashvisor API ، وعلى اللوحة اليمنى ، ضمن علامة التبويب "بحث" ، حدد "نظرة عامة على الجوار".

4. في اللوحة اليمنى في تلك الصفحة ، حدد القائمة المنسدلة للرمز وابحث عن "Node.js". يجب أن يكون هناك شريط جانبي آخر مدرج "Axios". ابحث عنه واختر "Axios".

سيتم وضع رؤوس HTTP في مثيل Axios في الأعلى. ستدخل الطريقة وعنوان url والمعلمات داخل استدعاء الوظيفة. بعد استخراج البيانات ذات الصلة من مقتطف الرمز ، يجب أن يحتوي api.js على هذا الرمز في الملف.

axios = تتطلب ('axios') 
راجع الرمز بالكامل على https://rapidapi.com/blog/mashvisor-api-airbnb-data/

تكمن مشكلة عنوان URL الحالي في أنه ليس ديناميكيًا. نحن بحاجة إلى تمرير المتغيرات من سطر الأوامر مباشرة إلى السلسلة.

5. استبدل كل عرض أسعار على طرفي URL بـ backtick `. يؤدي هذا إلى إنشاء سلسلة حرفية ويسمح لنا بإدخال متغيرات في السلسلة باستخدام بناء الجملة $ {variableName}.

6. استبدلوا NeighborhoodId في عنوان URL بـ $ {Neighbourhood} وقيمة معلمة الحالة بمتغير الحالة بحيث سيبدو استدعاء API على النحو التالي:

... "الطريقة": "GET" ، "url": `https: //mashvisor-api.p.rapidapi.com/ne Neighborhood/$ {NeighborhoodId} / bar`،" params ": {" state ": state } ...

الآن بعد أن تم إعداد أول استدعاء API لدينا ، نحتاج إلى استيراد هذه الوظيفة إلى Reports.js واستدعائها داخل وظيفة addReport.

7. استيراد {الاستفادة} إلى Reports.js واستدعائها بشكل غير متزامن في الوظيفة.

... const {util} = required ('./ api') ...
... const addReport = async (name، Neighbourhood، state) => {try {// {data: [name]} يسحب كائن البيانات من الاستجابة ويعيد تسميته // الحصول على بيانات لكونه نظرة عامة على الحي {data: OverviewData} = انتظر util.getNe NeighborhoodOverview (معرّف الجوار ، الولاية)
// مساعدة ضحلة في عمق كائن الكائنOOerview = OverviewData.content؛
} catch (e) {console.log (e) return console.log (chalk.red.inverse ('Error fetching data report'))}} ...

لقد تسللت بعض الأشياء الأخرى في إضافة الرمز هذه. نقوم بتدمير استجابة Axios عن طريق سحب خاصية "البيانات" من كائن الاستجابة هذا وإعادة تسميته "نظرة عامة على البيانات".

ثم ، نتعمق في نص الاستجابة لمتغير نظرة عامة لأن المحتوى أقل قليلاً. نعرف ذلك من خلال النظر إلى أمثلة الردود في لوحة معلومات RapidAPI.

هناك أربعة أشياء مفقودة في هذه الوظيفة:

  1. تحميل في التقارير
  2. التحقق من الاسم المكرر
  3. تحديد البيانات من كائن الاستجابة
  4. حفظ التقارير

8. قم بإضافة استدعاء loadReports () في أعلى دالة addReport () واحفظ النتيجة في تقارير متغيرة.

9. استخدم وظيفة javascript find () لتكرار التقارير والبحث عن اسم مكرر.

10. إذا لم يكن هناك نسخة مكررة ، فاتصل بواجهة برمجة التطبيقات ، إن وجدت ، فقم بتسجيل الرسالة التي تشرح ذلك. بعد هذه الإضافات ، ستحتوي الوظيفة على الرمز ؛

... const addReport = async (name، NeighborhoodId، state) => {const Reports = loadReports () ؛ const replicateReport = Reports.find (report => report.name === name) ؛
if (! replicateReport) {try {// {data: [name]} تسحب كائن البيانات من الاستجابة وتعيد تسميته // الحصول على بيانات عن نظرة عامة على الأحياء {data: OverviewData} = في انتظار util.getNe NeighborhoodOverview (NeighborhoodId، state) / / مساعدة ضحلة العمق كائن كائن حيOverview = OverviewData.content؛
} catch (e) {console.log (e) return console.log (chalk.red.inverse ("Error fetching data report '))}} آخر {console.log (chalk.red.inverse (" التقرير موجود بالفعل " ))}} ...

سيكون حفظ بيانات التقرير سهلاً إلى حد ما. نحتاج فقط إلى دفعه إلى متغير تقاريرنا ثم استدعاء دالة saveReports (). قبل ذلك ، نحتاج في الواقع إلى تحليل البيانات التي نريدها من الاستجابة.

11. قم بإنشاء مجلد استخدام في جذر دليلنا وإضافة ملف cleanData.js.

أعلم أنه قد يبدو من المتاعب إنشاء كل هذه الملفات والمجلدات ، ولكن إذا كنا نأمل في إنشاء تطبيقات أكبر وأكثر إثارة ، فمن المهم أن ننتبه إلى تنظيم مشروعنا. لا نريد أن نحدث فوضى.

ستقوم هذه الوظيفة بقبول كائن الاستجابة الصغير ، وتعيين القيم لخصائص جديدة ، ثم إرجاع الكائن. لقد ألقيت نظرة سريعة على كائن الاستجابة في لوحة معلومات RapidAPI واخترت بيانات Airbnb والعقارات التقليدية من الكائن الذي تريد استخدامه.

سيبدو هذا مثل الكثير من التعليمات البرمجية ولكن معظمها ببساطة متغير وتعيين كائن.

12. أضف التعليمات البرمجية أدناه إلى cleanData.js.

const cleanData = غير متزامن (name، NeighborhoodId) => {
// الحصول على البيانات من كائن الاستجابة وتعيينها للمتغيرات الجديدة const airbnb_properties = Neighbool.num_of_airbnb_properties ؛ const traditional_properties = NeighborhoodOverview.num_of_traditional_properties ، const mash_meter = NeighborhoodOverview.mashMeter ؛ const avg_occupancy = NeighborhoodOverview.avg_occupancy ؛ const roi_airbnb = NeighborhoodOverview.airbnb_rental.roi ، const roi_traditional = NeighborhoodOverview.traditional_rental.roi ، const cap_rate_airbnb = Neighbourhood.airbnb_rental.cap_rate ؛ const cap_rate_traditional = NeighborhoodOverview.traditional_rental.cap_rate ، const Rental_income_airbnb = NeighborhoodOverview.airbnb_rental.rental_income ؛ const Rental_income_traditional = NeighborhoodOverview.traditional_rental.rental_income ،
// إنشاء كائن سيتم إرجاعه وإضافته إلى التقارير ، انظر الباقي على https://rapidapi.com/blog/mashvisor-api-airbnb-data/

لدينا الآن كائن يحتوي على عشر نقاط بيانات مفيدة حول Airbnb وخصائص التأجير التقليدية في حي معين.

13. استلم هذا الكائن مرة أخرى في وظيفة addReport () واحفظه في ملف Reports.json. نحتاج أيضًا إلى التأكد من استيراد وظيفة cleanData (). يجب أن يشبه الملف والوظيفة الآن ؛

... const cleanData = يتطلب ('./ util / cleanData')
... const addReport = async (name، NeighborhoodId) => {const Reports = loadReports () ؛ const replicateReport = Reports.find (report => report.name === name) ؛
انظر الباقي على https://rapidapi.com/blog/mashvisor-api-airbnb-data/

لقد مر وقت طويل منذ أن استخدمنا سطر الأوامر ، ولكن حان الوقت لاختبار الأمر add للتأكد من أن أوامرنا تصل بالفعل إلى هذه الوظيفة.

إذا حاولنا تمرير الحجج الخاصة بالاسم والموقع والدولة عبر سطر الأوامر ، فسوف تفشل. لم نقم بإضافة استدعاء دالة addReport (argv.name ، argv.location ، argv.state) إلى معالج أوامر الإضافة لدينا.

14. قم باستيراد وظيفة addReport واستدعائها في add.js. تأكد من تضمين الوسيطات الثلاثة التي يتم سحبها من كائن argv.

سيحتوي الملف الآن على الرمز:

تقارير التقارير = تتطلب ("../../ تقارير") ؛
export.command = 'add 'export.desc =' إضافة تقرير جديد 'export.builder = {name: {description:' Report name. '، requestOption: true، type:' string '}، الموقع: {description:' Mashvisor Neighborhood ID لسحب البيانات for. '، requestOption: true، type:' number '}، state: {description:' State to pull data for. '، requestOption: true، type:' string '}،} export.handler = function (argv) { Reports.addReport (argv.name، argv.location، argv.state)}

دعونا نختبر أن الحجج تشق طريقها إلى دالة addReport ().

15. تعليق على استدعاء API في الوظيفة وإضافة:

console.log (الاسم ، NeighborhoodId ، الولاية)

فوق الكود المعلق. قبل أن يتم طرح الخطأ ، يجب عليه تسجيل الحجج.

16. تشغيل تقارير العقدة cli.js تضيف "اختبار" 45624 "WA"

// إخراج وحدة التحكم ... اختبار 45624 WA // حججنا التي أدخلناها! مرجع خطأ: نظرة عامة لم يتم تعريف البيانات // باقي المكدس ...

في احسن الاحوال! إن حججنا تشق طريقها إلى الوظيفة ويمكن الآن استخدامها في استدعاء API لـ Mashvisor.

17. فك التعليق رمز وحذف سجل وحدة التحكم. قم بتشغيل الأمر التالي لإضافة تقريرنا الفعلي الأول:

تقارير العقدة cli.js تضيف "التقرير الأول" 271841 "WA"

تحقق من داخل التقارير. json وسترى أمثلة البيانات وبيانات التقرير الأولى!

هناك شيئان آخران متبقيان يتعين علينا القيام به.

  1. قم بإنهاء وظيفة viewReport (name) حتى نتمكن من عرض هذه البيانات بطريقة لطيفة.
  2. اكتب أمرًا يجد الحي الأقرب إلى موقعنا الحالي.

وظيفة العرض

في هذه الوظيفة سنحتاج إلى:

  • تحميل التقارير (لدينا وظيفة لذلك)
  • معرفة ما إذا كان الاسم المعين يمر في حجة صالحة ، و ؛
  • استدعاء وظيفة طباعة التقارير

سنستخدم شفرة متطابقة تقريبًا من وظيفة الإضافة.

// Reports.js ... const viewReport = (name) => {const Reports = loadReports () ؛ let found = Reports.find ((report) => report.name === name) // إذا تم العثور على التقرير ، اتصل بوظيفة تطبع البيانات إلى وحدة التحكم} ...

2. قم بإعداد كتلة if / else لاستدعاء وظيفة إذا تم العثور على تقرير بهذا الاسم. إذا لم يتطابق التقرير ، فقم بتسجيل أنه تعذر العثور على التقرير.

// Reports.js ... const viewReport = (name) => {const Reports = loadReports () ؛ let found = Reports.find ((report) => report.name === name) if (found) {printBasicReport (found)؛ // غير موجود حتى الآن} آخر {console.log (chalk.red.inverse ("تعذر العثور على هذا التقرير."))}} ...

الدالة printBasicReport (found) غير موجودة بعد.

3. قم بإنشاء دليل جديد في جذر المشروع المسمى print_report وداخل هذا الدليل ، قم بإنشاء ملف باسم printBasicReports.js.

سنقوم بإنشاء مصفوفة بمصفوفات أصغر كقيم. سيكون لكل صفيف شيئين.

  1. تسمية البيانات التي نقوم بطباعتها.
  2. البيانات المقابلة من الكائن الذي تم تمريره.

4. أدخل الرمز أدناه في ملفنا الجديد.

// printBasicReport.js
const printBasicReport = (found) => {
const reportLines = ["" اسم التقرير "، found.name] ، [" الموقع "، found.ne NeighborhoodId] ، [" خصائص Airbnb "، found.airbnb_properties] ، [" الخصائص التقليدية "، found.traditional_properties] ، [" Mash المقياس "، found.mash_meter] ، [" متوسط ​​معدل الإشغال "، found.avg_occupancy] ، [" ROI - Airbnb "، found.roi_airbnb] ، [" ROI - Traditional "، found.roi_traditional] ، [" Cap Rate - Airbnb " "، found.cap_rate_airbnb]، [" Cap Rate - Traditional "، found.cap_rate_traditional]، [" Rental Rental - Airbnb "، found.rental_income_airbnb]، [" Rental Income - Traditional "، found.rental_income_traditional] ،]
// iterate عبر العناصر وطباعتها على وحدة التحكم}
module.exports = printBasicReport ؛

نقوم بسحب العناصر من الكائن الموجود ومطابقته بسهولة أكبر في قراءة الملصق.

بعد ذلك ، أضف Chalk إلى العملية و console.log () بياناتنا وتسمياتنا.

5. سيكون لملف printBasicReports.js النهائي الكود ؛

const الطباشير = تتطلب ('chalk') // استيراد الطباشير
const printBasicReport = (found) => {const labelText = chalk.white.bgCyan ؛ // إنشاء دالة باستخدام الطباشير
const reportLines = ["" اسم التقرير "، found.name] ، [" الموقع "، found.ne NeighborhoodId] ، [" خصائص Airbnb "، found.airbnb_properties] ، [" الخصائص التقليدية "، found.traditional_properties] ، [" Mash المقياس "، found.mash_meter] ، [" متوسط ​​معدل الإشغال "، found.avg_occupancy] ، [" ROI - Airbnb "، found.roi_airbnb] ، [" ROI - Traditional "، found.roi_traditional] ، [" Cap Rate - Airbnb " "، found.cap_rate_airbnb]، [" Cap Rate - Traditional "، found.cap_rate_traditional]، [" Rental Rental - Airbnb "، found.rental_income_airbnb]، [" Rental Income - Traditional "، found.rental_income_traditional] ،]
// iterate عبر الأسطر التي تضيف بعض تنسيق reportLines.map (line => {console.log (labelText (line [0]) + ": \ n \ t" + "----" + line [1])} )}
module.exports = printBasicReport ؛

6. عد إلى Reports.js واستورد الوظيفة الجديدة في الأعلى

// التقارير. شبيبة ... const printBasicReport = تتطلب ('. / print_report / printBasicReport') ...

هذا الأمر جاهز تقريبًا للاستخدام ، لكننا نحتاج إلى إضافة الوظيفة ل view.js

7. أضف الوظيفة ل view.js

// view.js const Reports = تتطلب ('../../ Reports') // استيراد دالة في ملف export.command = 'view 'exports.desc =' عرض تقرير واحد 'export.builder = {name: {description: "Name of report you want to view."، requestOption: true، type:' string '}} export.handler = function (argv) {Reports.viewReport (argv.name) // وظيفة استدعاء وتمريرها من كائن argv}

8. في جذر دليلنا تنفيذ الأمر

تقارير العقدة cli.js عرض "التقرير الأول"

يجب أن يبدو الإخراج في وحدة التحكم مثل هذا!

هذه الكثير من المعلومات المفيدة من مكالمة API واحدة فقط. يمكننا استخدام Mash Meter كدليل تنبئي أو ببساطة مقارنة عائد الاستثمار وعائد الإيجار بين Airbnb والطرق التقليدية.

إذا أردت حفظ المعلومات لوقت لاحق ، يمكنك ببساطة إعادة توجيه إخراج المشروع إلى ملف مختلف باستخدام الأمر ؛

عقدة cli.js عرض [name_of_report]> fileName.txt

سيؤدي هذا إلى إنشاء الملف وكتابته مثل محتويات ذلك الملف.

ابحث عن أقرب حي لك

سوف أقوم بإلقاء ملفين عليك يسمح لك بإدخال الإحداثيات الخاصة بك والحصول على معرف الجوار الأقرب إليك.

الأول هو find-closest.js. هذا أمر جديد وسوف يذهب الملف الجديد في دليل cmds /.

const findClosestNe Neighborhood = تتطلب ('../ use / findClosestNe Neighborhood')
exports.command = 'أقرب مسافة 'exports.desc =' Finds closts Neighborhood id 'export.builder = {lat: {description:' Latitude of current location '، requestOption: true، type:' number '} ، طويل: {description:' Longitude of current location ' ، requestOption: true ، اكتب: 'number'} ، المدينة: {description: "City the location is in"، requestOption: true، type: 'string'}، state: {description: "State the location is in"، requestOption : true ، اكتب: 'string'}،} export.handler = function (argv) {findClosestNe Neighborhood (argv.lat، argv.long، argv.city، argv.state)}

كان الملف التالي هو الملف الذي تم استيراده في أعلى هذه الصفحة (إذا لاحظت ذلك).

2. في دليل الاستخدام قم بإنشاء ملف findClosestNe Neighborhood.js وأضف الكود:

const {util} = required ('../ api') const chalk = required ('chalk')
راجع الرمز بالكامل على https://rapidapi.com/blog/mashvisor-api-airbnb-data/

يأخذ هذا الملف إحداثياتك ، ويرسل طلبًا إلى نقطة نهاية "قائمة الأحياء" في Mashvisor ويستعيد قائمة بالأشياء التي تمثل الأحياء في مدينتك.

ثم يقارن الإحداثيات المقدمة بالإحداثيات لكل حي ويحدد الأقرب منها. إنها ليست دالة حساب مسافة مثالية ، لكنها قريبة بما يكفي بالنسبة لنا.

نحتاج إلى إضافة استدعاء API للكائن المستخدم في api.js.

3. أضف طلب HTTP المجاور للقائمة إلى api.js أسفل مكالمة API السابقة.

// api.js
... module.exports = {الاستخدام: {... getNe NeighborhoodsInArea: (city، state) => مثيل ({"method": "GET"، "url": `https: //mashvisor-api.p.rapidapi .com / city / الأحياء / $ {state} / $ {city} `،})}، ...}

4. احصل على إحداثيات موقعك أو أي موقع تهتم به. إذا كنت بحاجة إلى مساعدة في الحصول على إحداثيات خطوط الطول والعرض ، فإن Google لديها خطوات للمساعدة.

5. تنفيذ أمر البحث عن أقرب إحداثيات ومدينة ودولة.

قمت بتشغيل الأمر لموقع في كابيتول هيل في سياتل.

عقدة cli.js Find-closest 47.627464 -122.321387 "سياتل" "WA"

وفي وحدة التحكم ، تم تسجيل أقرب حي.

أقرب حي هو برودواي برقم تعريف 250150

يمكنني الآن إعادة تشغيل الأمر add report الخاص بي باستخدام معرف حي Mashvisor الجديد هذا!

هذا هو!

تحرك للأمام

غطى هذا التطبيق الكثير من الموضوعات وتجاوزها أيضًا. تم إعداده بحيث يمكن للمنشئ إنشاء أوامر وتقارير وحدات وتبسيط رمز طلب HTTP الخاص بهم.

إن سحب البيانات من أعماق كائن الاستجابة هو أحد الجوانب الأكثر صعوبة في انتزاع البيانات من واجهة برمجة التطبيقات. تفرض هذه المهمة ضرائب خاصة إذا أنشأنا هذا التطبيق لإجراء 10 أو 20 مكالمة API.

إذا اتفقنا على أن الحفر في الكائنات مزعج بعض الشيء ، فيجب عليك التحقق من GraphQL لأن RapidAPI أضاف مؤخرًا دعمًا لهذا النوع من لغة الاستعلام.

ومع ذلك ، لا تتردد في إضافة المزيد من مكالمات HTTP إلى التطبيق إذا كنت ترغب في ذلك!

موارد ذات الصلة

  • Top Geocoding and Location APIs
  • أفضل واجهات برمجة تطبيقات الفندق
  • واجهات برمجة تطبيقات تطوير تطبيقات الجوال
  • كيفية بناء تطبيق مثل Airbnb؟

نشر في الأصل على https://rapidapi.com في 27 يناير 2020.