PHP, tüm Twitter Takipçileri getirmek ve arkadaşlar bunları karşılaştırmak

3 Cevap php

Ben aşağıdakileri yapmak için ölçeklenebilir yol arıyorum:

  • Kullanıcı girişi
  • Twitter Tüm Arkadaşlar getir
  • Twitter tüm Taraftarlar getir
  • Arkadaşlar wich Tüm İzleyiciler değildir Display

Sorun: Bu ölçeklenebilir bir şekilde nasıl yapılabilir? Bir kullanıcı en fazla 2 milyon arkadaş ya da takipçileri var olabilir. Şu anda bir döngü bir SQLite tablo içinde ve bunları karşılaştırmak hem saklamak ediyorum. Kullanıcı geri geldiğinde masa temizlenir ve süreç yeniden başlar.

Bu 100 finde çalışıyor - 1000 Arkadaş .. ama 500000 Arkadaş ile zor olacaktır. Onlar her an değişebilir çünkü ben listeleri önbelleğe olamaz ..

Herkes veri gibi büyük miktarda işlemek için iyi bir yol biliyor mu?

3 Cevap

Ben veritabanı gibi görünüyor bilmiyorum, ama bu ben bunu kurmak istiyorum nasıl olduğunu.

CREATE TABLE twitter_users (
    user_id INTEGER PRIMARY KEY NOT NULL,
    screen_name VARCHAR(20) NOT NULL
);

CREATE TABLE friends (
    friend_id INTEGER PRIMARY KEY NOT NULL
);

CREATE TABLE followers (
    friend_id INTEGER PRIMARY KEY NOT NULL
);

Sonra takipçileri değil arkadaşlar almak için bu SQL kullanabilirsiniz.

SELECT friend_id, screen_name
FROM friends
LEFT JOIN followers ON follower_id = friend_id
LEFT JOIN twitter_users ON user_id = friend_id
WHERE follower_id IS NULL

Ekran adı ise NULL onlar sizin twitter_users tabloda olmadığınız anlamına gelir. Sen eksik kullanıcıları aramak ve daha sonra bunları saklayabilirsiniz. Ekran adları nedenle periyodik tablosunu güncelleştirmek gerekebilir değiştirebilirsiniz.

Arkadaşı ve takipçisi bir listesini almak için friends/ids ve followers/ids API'lerini kullanan bir defada 5,000 kimlikleri. 100 ekran adları kalkmak için users/lookup API kullanın. Bir kullanıcı 2,000,000 arkadaş varsa hala popüler kullanıcılar için en azından listesini önbelleğe böylece kimliklerini listesini almak için 400 api çağrı alacak.

Işaret etmek başka bir şey - tek seferde takipçileri değil all arkadaş göstermek gerekiyor? Eğer bir seferde sadece sınırlı sayıda görüntülemeniz gerekiyorsa, örneğin 20, o zaman sadece bu 20 hesaplayabilirsiniz; daha istemek, daha sonra anında daha hesaplamak (; her istek üzerine, bir kaç daha fazla üretmek ya da sitenize göz olarak arka planda bunu).

Ben gerçekten bu teorik sınır olsa bile, tek bir sayfada milyon sonuçları bir çift ekran gerekir bir durum düşünemiyorum.

Yani, (onların API belgelerine kısaca bir göz atmak zorunda) işe yarayabilecek bir yaklaşım olacaktır

  • onların arkadaşları bir yığın kapmak statuses/friends API kullanarak (bunu zaten istek başına 100 olsun görünür)
  • for each retrieved friend
    • ikisi arasındaki takipçisi durumunu belirlemek için friendships/show kullanın
    • Eğer yeterli sonuç (örneğin 20) daha sonra kırmak var ise, bitirdiniz

Bu yaklaşım Twitter'ın rate limiting politikalarına izin verilenden daha sunucuya daha fazla istekleri gerektirir, ama sonra tekrar, istek başına 100 arkadaşlar 2.000.000 arkadaşlarıyla bir kullanıcı tüm arkadaş listenizi almak da çok önce sınırını aşacaktır Eğer hepsini (150 x istekler istek başına 100 = 15, 000) olsun. Nasıl bu sorunu çözmek için planlıyorsunuz?

Değil sadece bunu yapmak için bir yol, ama etkili: Bir kamu listesi vardır (ya da kendisi twitter) bir siteden her gün twitter kullanıcıların bir listesini indirmek için bir crontab çalıştırın, ardından endeks bu arkadaşlar (her gün belki 1000 çalıştırın). Sonra bir listesini retreive arkadaşlar ve diziler maç Curl kullanarak PHP ile twitter API erişebilirsiniz. Gitmek-gibi sınırlayıcı politikalar yukarıda belirtildiği başka bir şey yapmanızı engellemek gibi size algoritma geliştirmek, çünkü bu iyi çalışıyor. İyi şanslar! =)