Couchbase:使用Twitter和Java创建大型数据集

在播放/演示Couchbase或任何其他NoSQL引擎时,创建大型数据集的一种简单方法是将Twitter feed注入到数据库中。

对于这个小应用程序,我正在使用:

在此示例中,我使用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() {

                @Override
                public 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-snowflake
                    try {
                        JSONObject statusAsJson = new JSONObject(twitterMessage);
                        String idStr = statusAsJson.getString("id_str");
                        cbClient.add( idStr ,0, twitterMessage  );
                        System.out.print(".");
                    } catch (JSONException e) {
                        e.printStackTrace(); 
                    }
                }

                @Override
                public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
                }

                @Override
                public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
                }

                @Override
                public void onScrubGeo(long userId, long upToStatusId) {
                }

                @Override
                public 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=true

oauth.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值