2015-08-25 8 views
6

का उपयोग करके मुझे चयनित कुछ उपयोगकर्ताओं से वास्तविक समय में नए ट्वीट्स के अपने ऐप को सूचित करने की आवश्यकता है। AFAIK, ऐसा करने के लिए मुझे ट्विटर स्ट्रीमिंग एपीआई का उपयोग करने की आवश्यकता है। मैं ट्विटर 4 जे में आया हूं लेकिन मुझे यकीन नहीं है कि स्ट्रीमिंग एपीआई के साथ इसका उपयोग कैसे किया जाए। क्या किसी को इसका उपयोग करने के लिए किसी भी ठोस अप टू डेट उदाहरणों के बारे में पता है?ट्विटर स्ट्रीमिंग एपीआई

इसके अलावा, मैं स्ट्रीमिंग API दस्तावेज़ here में इस exerpt भर में आया था:

प्रत्येक खाते में सार्वजनिक अंतिम बिंदुओं को केवल एक ही खड़े संबंध बना सकते हैं, और एक बार में एक ही खाते के साथ अधिक से अधिक एक सार्वजनिक धारा से कनेक्ट कर रहा क्रेडेंशियल्स पुराने कनेक्शन को डिस्कनेक्ट कर देगा। ग्राहक जो अत्यधिक कनेक्शन प्रयास करते हैं (सफल और असफल दोनों) अपने आईपी को स्वचालित रूप से प्रतिबंधित करने का जोखिम चलाते हैं।

ऐप को एक नए ट्वीट प्राप्त होने पर सभी उपयोगकर्ताओं के लिए अपडेट करने की आवश्यकता होगी। क्या यह इस नियम को तोड़ देगा? क्या मुझे धारा प्राप्त करने के बजाय बैकएंड बनाने की आवश्यकता है और फिर वहां से नई ट्वीट्स को नीचे दबाएं?

उत्तर

2

आपको वास्तव में बैकएंड की आवश्यकता है, मैं एक PHP फ़ाइल बनाने के लिए सुझाव देता हूं (हालांकि कोई भी भाषा जो आप पसंद कर सकते हैं) स्ट्रीमिंग एपीआई से जुड़ती है, और हर नई पोस्ट पर Google क्लाउड संदेश सभी उपयोगकर्ताओं को भेजता है एप्लिकेशन। अपने एंड्रॉइड ऐप में आप एक प्रसारण रिसीवर लागू कर सकते हैं जो जीसीएम संदेश को संभालता है जिसमें कम से कम ट्वीट का लिंक होना चाहिए, लेकिन इसमें पूरी ट्वीट सामग्री हो सकती है।

सर्वर की तरह एक कनेक्शन कनेक्शन के बिना, आप पहले से ही स्ट्रीमिंग एपीआई नियमों को तोड़ने का सुझाव देते हैं, और इससे भी बदतर, एक समय में केवल एक उपयोगकर्ता का विश्वसनीय कनेक्शन होगा।

आशा है कि मदद करता है।

1

नहीं, आपको इस उद्देश्य के लिए किसी भी बैकएंड की आवश्यकता नहीं है। प्रत्येक प्रमाणीकृत उपयोगकर्ता के पास ऐप में स्वयं की स्ट्रीम हो सकती है। कोड स्निपेट निम्नलिखित है जो मैं अपने आवेदन में उपयोग कर रहा हूं।

मुझे लगता है कि उपयोगकर्ता उन उपयोगकर्ताओं का अनुसरण कर रहा है। यदि वे अनुसरण नहीं कर रहे हैं तो उन्हें अपनी स्ट्रीम में उनसे कोई ट्वीट नहीं मिलेंगे।

यदि आप कुछ उपयोगकर्ताओं से ट्वीट्स चाहते हैं तो इस तथ्य के बावजूद कि वे उन निश्चित उपयोगकर्ताओं का पालन कर रहे हैं या नहीं, तो आपको सार्वजनिक स्ट्रीम खोलनी होगी। यह ऐप में ही नहीं किया जा सकता है और इसलिए आपको उस मामले में बैकएंड की आवश्यकता होगी। उस स्थिति में धारा का केवल एक उदाहरण खोला जाना चाहिए और जब भी उन उपयोगकर्ताओं से एक ट्वीट आता है, तो ट्वीट को आपके ऐप के प्रत्येक उपयोगकर्ता को सूचित किया जाना चाहिए।

मुझे उम्मीद है कि मैं अपनी व्याख्या के साथ स्पष्ट हूं।

इस कोड में आपको केवल उन चयनित उपयोगकर्ताओं के लिए ट्वीट फ़िल्टर करना होगा।

ConfigurationBuilder config = new ConfigurationBuilder(); 
    config.setJSONStoreEnabled(true); 
    config.setOAuthConsumerKey(Keys.TWITTER_KEY); 
    config.setOAuthConsumerSecret(Keys.TWITTER_SECRET); 
    config.setOAuthAccessToken(HelperFunctions.currentSession.getAuthToken().token); 
    config.setOAuthAccessTokenSecret(HelperFunctions.currentSession.getAuthToken().secret); 

    Configuration cf = config.build(); 
    HelperFunctions.twitter = new TwitterFactory(cf).getInstance(); 

    HelperFunctions.twitterStream = new TwitterStreamFactory(cf).getInstance(); 
    HelperFunctions.twitterStream.addListener(listener); 
    // user() method internally creates a thread which manipulates TwitterStream and calls these adequate listener methods continuously. 
    HelperFunctions.twitterStream.user(); 







private static final UserStreamListener listener = new UserStreamListener() { 
    @Override 
    public void onStatus(Status status) { 
     // Filter your selected users here 
     System.out.println("onStatus @" + status.getUser().getScreenName() + " - " + status.getText()); 
    } 

    @Override 
    public void onFriendList(long[] friendIds) { 
    } 

    @Override 
    public void onFavorite(User source, User target, Status favoritedStatus) { 
    } 

    @Override 
    public void onUnfavorite(User source, User target, Status unfavoritedStatus) { 

    } 

    @Override 
    public void onFollow(User source, User followedUser) { 
    } 

    @Override 
    public void onUnfollow(User source, User unfollowedUser) { 
    } 

    @Override 
    public void onDirectMessage(DirectMessage directMessage) { 
    } 

    @Override 
    public void onUserListMemberAddition(User addedMember, User listOwner, UserList list) { 
    } 

    @Override 
    public void onUserListMemberDeletion(User deletedMember, User listOwner, UserList list) { 
    } 

    @Override 
    public void onUserListSubscription(User subscriber, User listOwner, UserList list) { 
    } 

    @Override 
    public void onUserListUnsubscription(User subscriber, User listOwner, UserList list) { 
    } 

    @Override 
    public void onUserListCreation(User listOwner, UserList list) { 
    } 

    @Override 
    public void onUserListUpdate(User listOwner, UserList list) { 
    } 

    @Override 
    public void onUserListDeletion(User listOwner, UserList list) { 
    } 

    @Override 
    public void onUserProfileUpdate(User updatedUser) { 
    } 

    @Override 
    public void onBlock(User source, User blockedUser) { 
    } 

    @Override 
    public void onUnblock(User source, User unblockedUser) { 
    } 

    @Override 
    public void onException(Exception ex) { 
    } 

    @Override 
    public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) { 
     System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId()); 
    } 

    @Override 
    public void onDeletionNotice(long directMessageId, long userId) { 
     System.out.println("Got a direct message deletion notice id:" + directMessageId); 
    } 

    @Override 
    public void onTrackLimitationNotice(int numberOfLimitedStatuses) { 
     System.out.println("Got a track limitation notice:" + numberOfLimitedStatuses); 
    } 

    @Override 
    public void onScrubGeo(long userId, long upToStatusId) { 
     System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId); 
    } 

    @Override 
    public void onStallWarning(StallWarning warning) { 
     System.out.println("Got stall warning:" + warning); 
    } 
}; 
+0

हां इसे विशिष्ट उपयोगकर्ताओं से नई ट्वीट्स के सभी ऐप उपयोगकर्ताओं को सूचित करने की आवश्यकता होगी भले ही ऐप उपयोगकर्ता उनका अनुसरण कर रहा हो या नहीं। – Orbit

+0

फिर आपको बैकएंड की आवश्यकता है। क्योंकि उन उपयोगकर्ताओं को ट्वीट्स प्राप्त नहीं होंगे यदि वे उन उपयोगकर्ताओं का पालन नहीं कर रहे हैं। आपको स्ट्रीमिंग का उपयोग करके अपने बैकएंड सर्वर में सभी ट्वीट्स प्राप्त करना होगा और प्रत्येक प्रासंगिक ट्वीट पर पुश मैसेजिंग का उपयोग करके सभी उपयोगकर्ता को सूचित किया जाएगा। – sahu

संबंधित मुद्दे