ما هي أفضل طريقة للحصول على البيانات التي أريدها من تويتر؟

StackOverflow https://stackoverflow.com/questions/1036187

  •  10-07-2019
  •  | 
  •  

سؤال

أقوم حاليًا بحفظ بعض بيانات Twitter في MySQL.يسمح لي مضيفي فقط بتشغيل وظائف cron كل ساعة، لذلك لمحاكاة نتائج الوقت الفعلي، قمت بنسخ نفس الملف 6 مرات، وتشغيل واحد كل 10 دقائق (يسمح لك المضيف بالتحكم في الإزاحة بالساعة).هذا غبي، على ما أعتقد.

هل هناك آلية يمكنني التعرف عليها والتي من شأنها أن تدفع البيانات في طريقي؟أي أفكار أو اقتراحات موضع ترحيب.

(لقد أبعدت نفسي عن مجرد الاستعلام عن خادمهم مع كل مشاهدة للصفحة؛أعرف ما يكفي لأعرف أن هذه ممارسة سيئة)

هل كانت مفيدة؟

المحلول

وماذا عن الوصول إلى صفحة الويب (التي ستقوم بدورها تنفيذ البرنامج) استضافت في الملقم عن طريق إضافة لكرون في جانب العميل (نظام المنزل):

/usr/bin/curl http://yourserver.com/twitter

وعلى خلاف ذلك، يمكنك تشغيل البرنامج النصي باش التالية كل ساعة:

#!/bin/bash

for (( i = 0; i < 6; i += 1 )); do
    /usr/bin/curl 'http://yourserver.com/twitter'
    sleep 600
done

نصائح أخرى

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

  1. اطلب إجراء عمليات فحص لمعرفة ما إذا كانت بيانات تويتر الجديدة بحاجة إلى استرجاعها
  2. تحقق من جدول القفل لمعرفة ما إذا كان هناك طلب آخر يتحدث بالفعل إلى تويتر
  3. إضافة سجل لقفل الجدول.تأكد من تحديد البيانات في عمود تم تعيينه ليكون فريدًا عبر قيد قاعدة البيانات.هذا سوف يمنعك من صنع قفلين.
  4. تحدث إلى تويتر، واحفظ بيانات تويتر.
  5. إزالة سجل القفل

للحصول على السرعة، تأكد من وجود جدول القفل في الذاكرة أو استخدم memcached بدلاً من ذلك.بالطبع، إذا كان بإمكانك استخدام memcached، فمن المحتمل أن يكون لديك سيطرة كاملة على cron على أي حال.:)

وهناك حل بسيط نسبيا لتشغيل وظيفة كرون على كمبيوتر آخر. وسيبذل الطلبات إلى تويتر ثم تنفيذ وظيفة HTTP إلى صفحة معينة على الخادم (مثل http://foo.com / latestTwitterData ). بطبيعة الحال، فإن كنت تريد أن يكون التوثيق لمنع حماقة العشوائية الحصول على إرسالها إليك.

وأنا لا أعرف إذا كان هذا هو المعقول لموقفك.

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

// pseudocode
while(1) {
    // do request

    // sleep 1 second
    sleep(1);
}

لماذا لا مجرد وضع حلقة في حين في البرنامج ومن ثم النوم N ثانية بين فترة طويلة ولكن كنت في حاجة إلى التحديثات؟ يمكنك ثم يموت بعد 59 دقيقة 30 ثانية.

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

و./prog.pl; sleep 60; ./prog.pl

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top