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

在播放/演示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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西门子scl语言编程手册_西门子SCL编程PEEK指令讲解

单词“peek”在英语中表示“偷看&#xff0c;瞥一眼”&#xff0c;在计算机编程中表示“读取数据”。在西门子SCL编程中&#xff0c;PEEK指令可以用来读取输入缓存区(I)、输出缓存区(Q)、位存储区(M)及数据块(DB)中的数据&#xff0c;常用作间接寻址。今天这篇文章&#xff0c;…

Guava的Collections2:过滤和转换Java集合

Groovy的便利之一是能够通过Groovy的闭包支持轻松地对集合执行过滤和转换操作。 Guava将对集合的过滤和转换引入标准Java&#xff0c;这是本文的主题。 Guava的Collections2类具有两个公共方法&#xff0c;这两个方法都是静态的。 方法filter&#xff08;Collection&#xff0…

钉钉机器人怎么设置自动回复_项目部署成功后触发钉钉机器人发送消息提醒——入门配置...

钉钉建好一个群打开群设置, 找到群机器人添加一个你想要的机器人可以使用自定义自定义机器人可以自定义头像,名字,生成一个webhook(https post的请求地址)到这里, 钉钉机器人设置好了,接下来我们对照文档进行配置https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq/XAzBI -…

mysql加锁语法_MySql 加锁问题

1、设置非自动提交 set autocommit0; 这时候 for update才会起作用2、一般用法 set autocommit0; for update(加锁) ; commit/rollback; set autocommit1;首先看一下&#xff0c;set autocommit0 后&#xff0c;执行哪些语句会自动加锁&#xff0c;加的是什么锁&#xff1f…

td过长,将固定宽度table撑开

解决办法&#xff1a; 在table上加上样式: table{table-layout:fixed;word-break:break-all} table-layout:fixed tablle的列宽由表格宽度和列宽设定。 word-break:break-all 允许在单词内换行。 正常情况下&#xff1a; table表格中td过长&#xff1a; 加上样式之后&#…

Android几秒后自动关闭dialog

代码改变世界 Android几秒后自动关闭dialog AlertDialog.Builder builder new AlertDialog.Builder(v.getContext());builder.setTitle("发送成功&#xff01;");builder.setMessage("2秒后自动关闭&#xff01;");builder.setCancelable(true);final Ale…

控制元素的div属性

1、需求分析 改变元素的宽、高、颜色、显示、重置等属性。 2、技术分析 基础的css、html、js 3、详细分析 如图&#xff0c;单击按钮&#xff0c;改变元素属性: 3.1 HTML部分 根据视图不难发现&#xff0c;内容分两大不分:按钮栏和效果图&#xff0c;所以设置两个div。 <…

使用JMeter和Yourkit进行REST / HTTP服务的性能分析

我的上一篇文章描述了如何使用JMeter完成异步REST / HTTP服务的压力测试或负载测试。 但是&#xff0c;运行这样的测试通常表明被测系统不能很好地应对不断增加的负载。 现在的问题是如何找到瓶颈&#xff1f; 深入研究代码以检测可疑部分可能是另一种选择。 但是考虑到潜在的…

java中间件_90%的Java程序员,都扛不住这波消息中间件的面试四连炮!

概述大家平时也有用到一些消息中间件(MQ)&#xff0c;但是对其理解可能仅停留在会使用API能实现生产消息、消费消息就完事了。对MQ更加深入的问题&#xff0c;可能很多人没怎么思考过。比如&#xff0c;你跳槽面试时&#xff0c;如果面试官看到你简历上写了&#xff0c;熟练掌握…

python 取array并集_Python内置数据结构原理与性能简易分析

ins ngladc文末左下方阅读原文指向了本人博客链接&#xff0c;不含广告。参考资料中的相关链接&#xff0c;可以在博客文章的最下方获取。推荐苹果手机用户使用浅色模式观看。前言 对于一些算法题&#xff0c;可以使用Python自带的内置函数解决。但很多时候用就用了&#xff0c…

ae合成复制脚本_稀缺资源—这几个AE脚本使用频率很高,赶紧收藏吧!

「第442期」毫无疑问&#xff0c;AE已经成为目前制作短视频比较主流的软件&#xff0c;效果的多样化深受很多创作者的喜爱。随着对软件的熟悉&#xff0c;越发觉得AE主要是基于多图层控制的软件。如果制作一些简单的效果&#xff0c;几个图层几个滤镜就可以搞定&#xff0c;但如…

程序员的幸福感和颈椎病

脖子一直疼&#xff01; 去医院检查&#xff0c;拍片子的医生在造影室里冲我喊&#xff1a; “小伙子&#xff0c;你多大年纪啦&#xff1f;” 我说&#xff1a;“我三十来岁&#xff0c;咋啦” 医生说&#xff1a;“怎么这么年轻就得这种病啊&#xff01;” 我当时腿就有点软&…

python实现词语相似度计算分析_相似度计算的方法及Python实现

现实生活中&#xff0c;我们经常提到距离这个词&#xff0c;本文谈的相似度就是基于距离定义的&#xff0c;当两个向量之间的距离特别小时&#xff0c;就说这俩个向量相似度高&#xff0c;反之相似度不高。所以&#xff0c;衡量相似度的指标就是距离度量。经常使用的相似度计算…

poll函数_I/O复用 - 三组I/O复用函数的比较

在之前的文章中 I/O复用 - epoll 和 I/O复用 - select&poll 中我们讨论了三组I/O复用的系统调用&#xff0c;这3组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间&#xff0c;直到一个或多个文件描述符上有事件发生时返回&#xff0c;返回值是…

css3画图那些事(三角形、圆形、梯形等)

闲来无事&#xff0c;写写图形。当时巩固一下css3吧.。前端小白&#xff0c;写的不好还请前辈多指教。 三角形 { width: 0;height: 0;border-bottom: 140px solid red ;border-right: 70px solid transparent;border-left: 70px solid transparent; } 圆形 {width: 0px;height…

docker 数据库 mysql_在Docker中体验数据库之MySql

在上一篇在Docker中体验数据库之Mongodb之后&#xff0c;这次记录一下在docker中安装mysql。过程要比Mongodb麻烦一点……参考网址&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/linux-installation-docker.htmlhttps://hub.docker.com/r/mysql/mysql-server/安装过程如…

使用JMeter对异步HTTP / REST服务进行压力/负载测试

尽管我一直在使用JMeter进行Web应用程序的压力测试和负载测试好几次&#xff0c;但我们还是花了一些时间才弄清楚如何使用该工具测试基于异步HTTP / REST的服务。 在我们这里&#xff0c;我是指一名程序员&#xff0c; Holger Staudacher &#xff0c;我很荣幸能与当前的一个项…

web前端学习之ruby标记和rt/rp标记

ruby 标记定义ruby注释&#xff08;中文注音或字符&#xff09;。ruby标记与rt标记一同使用。ruby标记由一个或多个字符&#xff08;需要一个解释/发音&#xff09;和一个提供该信息的rt 标记组成&#xff0c;还包括可选的rp标记&#xff0c;定义当浏览器不支持ruby 标记时显示…

作为一名程序员,聊聊我们的现状和未来

前言&#xff1a;互联网这个高速发展的新兴行业&#xff0c;注定是敢想敢干敢创新&#xff0c;耐劳耐操耐折腾年轻人的天下&#xff1f; 我们所在的互联网行业&#xff0c;不断地有新的公司冒出&#xff0c;有新的商业模式成形&#xff0c;有新的产品形态影响着大家的生活日常&…

ubuntu dhcp ping 不通 自己_??2、DHCP安装和配置

DHCP动态主机设置协议&#xff0c;是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;可以快速分配IP地址&#xff0c;解决内网IP不足、手动配置IP造成IP冲突以及内网机器多手工配置比较麻烦的问题。1.把win2008和win2003设置同一网段&#xff0c;网络适配器—配置…