دليل شامل: بناء أداة تحليل المشاعر لتغريدات تويتر باستخدام Node.js و Google Cloud

دقائق القراءة: 6

في عالم اليوم الرقمي المتسارع، أصبحت وسائل التواصل الاجتماعي منجمًا للبيانات التي تحمل في طياتها رؤى قيمة حول الرأي العام والمشاعر تجاه موضوعات معينة. هل تساءلت يومًا عن كيفية تحليل هذه الكميات الهائلة من النصوص لفهم ما يشعر به الناس؟ في هذا الدليل الشامل، سنقوم ببناء أداة قوية لتحليل المشاعر (Sentiment Analysis) لتغريدات تويتر، مما يتيح لنا استكشاف الرأي العام حول أي موضوع تختاره. سنتعمق في استخدام Node.js للتفاعل مع واجهة برمجة تطبيقات تويتر (Twitter API) وخدمات Google Cloud Natural Language للحصول على تحليل دقيق للمشاعر.

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

الخطوة الأولى: الحصول على مفتاح API لتويتر

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

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

الخطوة الثانية: إعداد مشروع Node.js

سنستخدم Node.js لبناء هذا التطبيق. لإنشاء مشروع جديد، قم بتشغيل الأوامر التالية في سطر الأوامر:

npm init -y
npm install twitter-lite

سيؤدي هذا إلى إنشاء مشروع Node.js جديد وتثبيت حزمة twitter-lite. هذه الحزمة تجعل التفاعل مع واجهة برمجة تطبيقات تويتر (Twitter API) سهلاً للغاية. للمصادقة على طلباتنا، سنستخدم رمز مميز من نوع OAuth2.0 bearer token. توفر حزمة twitter-lite طريقة سهلة للتعامل مع مصادقة تويتر.

لنقم بإنشاء ملف جديد باسم index.js وإضافة الكود التالي إليه:

const Twitter = require('twitter-lite');

const user = new Twitter({
  consumer_key: "YOUR_API_KEY",
  consumer_secret: "YOUR_API_SECRET",
});

// Wrap the following code in an async function that is called
// immediately so that we can use "await" statements.
(async function () {
  try {
    // Retrieve the bearer token from twitter.
    const response = await user.getBearerToken();
    console.log(`Got the following Bearer token from Twitter: ${response.access_token}`);

    // Construct our API client with the bearer token.
    const app = new Twitter({
      bearer_token: response.access_token,
    });
    // هنا يمكنك إضافة المزيد من التعليمات البرمجية للتفاعل مع API
  } catch (e) {
    console.log("There was an error calling the Twitter API.");
    console.dir(e);
  }
})();

عند تشغيل هذا الكود، ستلاحظ في وحدة التحكم إخراجًا مشابهًا لما يلي (مع استبدال الرمز المميز الخاص بك):

Got the following Bearer token from Twitter: THE_TWITTER_BEARER_TOKEN

رائع! حتى الآن، كل شيء يعمل بشكل مثالي، وقد حصلنا على الرمز المميز للمصادقة.

الخطوة الثالثة: جلب التغريدات الحديثة

الجزء التالي هو استرداد التغريدات الحديثة من واجهة برمجة تطبيقات تويتر (Twitter API). في وثائق تويتر، يمكنك رؤية أن هناك نقطة نهاية (endpoint) للبحث عن التغريدات الحديثة. لتطبيق هذا، سنضيف الكود التالي إلى ملف index.js:

const Twitter = require('twitter-lite');

(async function () {
  const user = new Twitter({
    consumer_key: "YOUR_API_KEY",
    consumer_secret: "YOUR_API_SECRET",
  });

  try {
    let response = await user.getBearerToken();
    const app = new Twitter({
      bearer_token: response.access_token,
    });

    // Search for recent tweets from the Twitter API
    response = await app.get(`/search/tweets`, {
      q: "Lionel Messi", // The search term
      lang: "en",        // Let's only get English tweets
      count: 100,        // Limit the results to 100 tweets
    });

    // Loop over all the tweets and print the text
    for (const tweet of response.statuses) {
      console.dir(tweet.text);
    }
  } catch (e) {
    console.log("There was an error calling the Twitter API");
    console.dir(e);
  }
})();

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

"RT @TheFutbolPage: Some of Lionel Messi's best dribbles."
"RT @MagufuliMugabe: Lionel Messi ? didn't just wake up one day and become the best player in the world no HE trained. So if your girl is…"
"RT @goal: The boy who would be King ? Is Ansu Fati the heir to Lionel Messi 's throne?"

وغيرها الكثير…

الخطوة الرابعة: إجراء تحليل المشاعر باستخدام Google Cloud

لإجراء تحليل المشاعر، سنستخدم واجهة برمجة تطبيقات Google Cloud Natural Language API. باستخدام هذه الواجهة، يمكنك الحصول على درجة المشاعر للنص بطلب API بسيط.

إعداد مشروع Google Cloud

  1. توجه أولاً إلى Google Cloud Console لإنشاء مشروع سحابي جديد.
  2. بعد ذلك، انتقل إلى Natural Language API وقم بتمكينها للمشروع.
  3. أخيرًا، نحتاج إلى إنشاء حساب خدمة (Service Account) للمصادقة. توجه إلى صفحة إنشاء حساب خدمة.
  4. عند إنشاء حساب الخدمة، ستحتاج إلى تنزيل ملف JSON الذي يحتوي على المفتاح الخاص لهذا الحساب. قم بتخزين هذا الملف في مجلد المشروع الخاص بك.

تثبيت حزمة Google Cloud Language

توفر Google حزمة Node.js للتفاعل مع Natural Language API، لذا دعنا نستخدمها. لتثبيتها، قم بتشغيل الأمر التالي:

npm install @google-cloud/language

لكي تعمل حزمة @google-cloud/language، تحتاج إلى معرفة مكان ملف المفتاح الخاص. ستحاول الحزمة قراءة متغير بيئة باسم GOOGLE_APPLICATION_CREDENTIALS يجب أن يشير إلى هذا الملف. لتعيين متغير البيئة هذا، سنقوم بتحديث مفتاح scripts في ملف package.json:

"scripts": {
  "start": "GOOGLE_APPLICATION_CREDENTIALS='./gcloud-private-key.json' node index.js"
}

لاحظ أنه لكي يعمل هذا، يجب أن تبدأ تشغيل السكريبت عن طريق تشغيل npm run start.

دالة تحليل المشاعر

مع كل هذا الإعداد، يمكننا أخيرًا البدء في البرمجة. سأضيف دالة جديدة باسم getSentiment إلى ملف index.js:

const language = require('@google-cloud/language');
const languageClient = new language.LanguageServiceClient();

async function getSentiment(text) {
  const document = {
    content: text,
    type: 'PLAIN_TEXT',
  };

  // Detects the sentiment of the text
  const [result] = await languageClient.analyzeSentiment({ document: document });
  const sentiment = result.documentSentiment;
  return sentiment.score;
}

تقوم هذه الدالة باستدعاء Google Natural Language API وتُرجع درجة المشاعر بين -1 (سلبية للغاية) و 1 (إيجابية للغاية). دعنا نختبرها ببضعة أمثلة:

getSentiment("I HATE MESSI");

تُرجع النتيجة التالية:

The sentiment score is -0.40

وبالمثل:

getSentiment("I LOVE MESSI");

تُرجع درجة مشاعر أعلى:

The sentiment score is 0.89

الخطوة الخامسة: دمج المكونات معًا

الخطوة الأخيرة هي استدعاء دالة getSentiment مع النص المستخرج من التغريدات. ومع ذلك، هناك نقطة مهمة يجب الانتباه إليها: أول 5,000 طلب API مجانية، وبعد ذلك ستحاسبك Google على الطلبات اللاحقة. لتقليل عدد استدعاءات API، سنقوم بدمج جميع التغريدات في سلسلة نصية واحدة (single string) كما يلي:

let allTweets = "";
for (const tweet of response.statuses) {
  allTweets += tweet.text + "\n";
}
const sentimentScore = await getSentiment(allTweets);
console.log(`The sentiment about ${query} is: ${sentimentScore}`);

الآن، نحتاج فقط إلى استدعاء API مرة واحدة بدلاً من 100 مرة (في حال جلب 100 تغريدة). السؤال الأخير بالطبع هو: ما رأي تويتر في ليونيل ميسي؟ عند تشغيل البرنامج، يعطي الإخراج التالي (مع افتراض أن query تم تعيينه إلى “Lionel Messi”):

The sentiment about Lionel Messi is: 0.2

إذن، تويتر إيجابي بشكل طفيف تجاه ليونيل ميسي في التغريدات التي تم تحليلها.

الخلاصة التقنية

لقد نجحنا في بناء برنامج Node.js يتفاعل مع واجهة برمجة تطبيقات تويتر (Twitter API) لجلب التغريدات الحديثة، ثم يرسل هذه التغريدات إلى واجهة برمجة تطبيقات Google Cloud Natural Language API لإجراء تحليل المشاعر. هذا المشروع يوضح قوة دمج خدمات الويب المختلفة لإنشاء أدوات تحليل بيانات قوية. يمكن توسيع هذه الأداة بشكل أكبر لتشمل ميزات مثل تصفية التغريدات، تحليل المشاعر حسب المنطقة الجغرافية، أو حتى بناء واجهة مستخدم رسومية (GUI) لتجربة أفضل. المفتاح هو فهم كيفية عمل كل مكون واستخدامه بفعالية لتحقيق الهدف المنشود.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *