在播放/演示Couchbase或任何其他NoSQL引擎時,創建大型數據集的一種簡單方法是將Twitter feed注入到數據庫中。
對于這個小應用程序,我正在使用:
- Couchbase Server 2.0服務器
- Couchbase Java SDK (將由Maven安裝)
- Twitter4J (將由Maven安裝)
- 使用Twitter4J調用Twitter流API
在此示例中,我使用Java將Tweets注入Couchbase,如果需要,顯然可以使用其他語言。
該項目的資源可在我的Github存儲庫( 適用于Couchbase的Twitter Injector)上找到,您也可以在此處下載Binary版本,并從命令行執行應用程序,請參閱“運行應用程序”段落 。 不要忘記創建您的Twitter oAuth密鑰(請參閱下一段)
創建oAuth密鑰
能夠使用Twitter API的第一件事是創建一組密鑰。 如果您想進一步了解所有這些鍵/令牌,請查看oAuth協議: http ://oauth.net/
1.登錄到Twitter開發門戶: https : //dev.twitter.com/
2.創建一個新的應用程序
點擊“創建應用”鏈接或進入“用戶菜單>我的應用>創建新應用”
3.輸入應用程序詳細信息
4.單擊“創建您的Twitter應用程序”按鈕
您的應用程序的OAuth設置現已可用:
5-在“應用程序設置”頁面上,然后單擊“創建我的訪問令牌”按鈕
現在,您已擁有創建應用程序所需的所有信息:
- 消費者密鑰
- 消費者秘密
- 訪問令牌
- 訪問令牌機密
從命令行運行Java應用程序時,這些鍵將在twitter4j.properties
文件中使用。請參閱
創建Java應用程序
以下代碼是應用程序的主要代碼:
package com.couchbase.demo;import com.couchbase.client.CouchbaseClient;
import org.json.JSONException;
import org.json.JSONObject;
import twitter4j.*;
import twitter4j.json.DataObjectFactory;import java.io.InputStream;
import java.net.URI;import java.util.ArrayList;
import java.util.List;
import java.util.Properties;public class TwitterInjector {public final static String COUCHBASE_URIS = "couchbase.uri.list";public final static String COUCHBASE_BUCKET = "couchbase.bucket";public final static String COUCHBASE_PASSWORD = "couchbase.password";private List<URI> couchbaseServerUris = new ArrayList<URI>();private String couchbaseBucket = "default";private String couchbasePassword = "";public static void main(String[] args) {TwitterInjector twitterInjector = new TwitterInjector();twitterInjector.setUp();twitterInjector.injectTweets();}private void setUp() {try {Properties prop = new Properties();InputStream in = TwitterInjector.class.getClassLoader().getResourceAsStream("twitter4j.properties");if (in == null) {throw new Exception("File twitter4j.properties not found");}prop.load(in);in.close();if (prop.containsKey(COUCHBASE_URIS)) {String[] uriStrings = prop.getProperty(COUCHBASE_URIS).split(",");for (int i=0; i<uriStrings.length; i++) {couchbaseServerUris.add( new URI( uriStrings[i] ) );}} else {couchbaseServerUris.add( new URI("http://127.0.0.1:8091/pools") );}if (prop.containsKey(COUCHBASE_BUCKET)) {couchbaseBucket = prop.getProperty(COUCHBASE_BUCKET);}if (prop.containsKey(COUCHBASE_PASSWORD)) {couchbasePassword = prop.getProperty(COUCHBASE_PASSWORD);}} catch (Exception e) {System.out.println( e.getMessage() );System.exit(0);}}private void injectTweets() {TwitterStream twitterStream = new TwitterStreamFactory().getInstance();try {final CouchbaseClient cbClient = new CouchbaseClient( couchbaseServerUris , couchbaseBucket , couchbasePassword );System.out.println("Send data to : "+ couchbaseServerUris +"/"+ couchbaseBucket );StatusListener listener = new StatusListener() {@Overridepublic void onStatus(Status status) {String twitterMessage = DataObjectFactory.getRawJSON(status);// extract the id_str from the JSON document// see : https://dev.twitter.com/docs/twitter-ids-json-and-snowflaketry {JSONObject statusAsJson = new JSONObject(twitterMessage);String idStr = statusAsJson.getString("id_str");cbClient.add( idStr ,0, twitterMessage );System.out.print(".");} catch (JSONException e) {e.printStackTrace(); }}@Overridepublic void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {}@Overridepublic void onTrackLimitationNotice(int numberOfLimitedStatuses) {}@Overridepublic void onScrubGeo(long userId, long upToStatusId) {}@Overridepublic void onException(Exception ex) {ex.printStackTrace();}};twitterStream.addListener(listener);twitterStream.sample();} catch (Exception e) {e.printStackTrace(); }}}
一些基本的解釋:
-
setUp()
方法僅從類路徑中讀取twitter4j.properties
文件以構建Couchbase連接字符串。 - injectTweets將打開Couchbase連接-第76行,并調用TwitterStream API。
- 將創建一個
Listener
,并將從Twitter接收所有的onStatus
(狀態)。 最重要的方法是onStatus(),它接收消息并將其保存到Couchbase中。 - 一件有趣的事情:由于
Couchbase
是一個JSON文檔數據庫,因此您可以直接獲取JSON字符串并直接保存它。
cbClient.add(idStr,0 ,twitterMessage);
打包
為了能夠直接從Jar文件執行應用程序,我正在使用帶有以下信息的Assembly插件:
pom.xml:
...
<archive><manifest><mainclass>com.couchbase.demo.TwitterInjector</mainclass></manifest><manifestentries><class-path>.</class-path></manifestentries>
</archive>
...
一些信息:
- mainClass條目允許您設置運行java -jar命令時要執行的類。
- Class-Path條目允許您將當前目錄設置為類路徑的一部分,程序將在該目錄中搜索twitter4j.properties文件。
- 程序集文件還配置為包含所有依賴項(Twitter4J,Couchbase客戶端SDK等)
如果您確實想從源代碼構建它,只需運行:
mvn clean package
這將創建以下Jar文件。 /target/CouchbaseTwitterInjector.jar
運行Java應用程序
在運行該應用程序之前,您必須創建一個twitter4j.properties文件,其中包含以下信息:
twitter4j.jsonStoreEnabled=trueoauth.consumerKey=[YOUR CONSUMER KEY]
oauth.consumerSecret=[YOUR CONSUMER SECRET KEY]
oauth.accessToken=[YOUR ACCESS TOKEN]
oauth.accessTokenSecret=[YOUR ACCESS TOKEN SECRET]couchbase.uri.list=http://127.0.0.1:8091/pools
couchbase.bucket=default
couchbase.password=
保存屬性文件,然后從同一位置運行:
jar -jar [path-to-jar]/CouchbaseTwitterInjector.jar
這會將推文注入您的Couchbase服務器。 請享用 !
參考: Couchbase:通過Tug博客博客中的JCG合作伙伴 Tugdual Grall 使用Twitter和Java創建大型數據集 。
翻譯自: https://www.javacodegeeks.com/2012/11/couchbase-create-a-large-dataset-using-twitter-and-java.html