{"paragraphs":[{"text":"%md\n\nStep 1. Get your OAuth Credentials from [apps.twitter.com](https://apps.twitter.com/)\n","dateUpdated":"2016-10-25T11:58:47+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true,"editorMode":"ace/mode/markdown"},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477439870349_-520601802","id":"20161025-235750_-939886635","result":{"code":"SUCCESS","type":"HTML","msg":"
Step 1. Get your OAuth Credentials from apps.twitter.com
\n"},"dateCreated":"2016-10-25T11:57:50+0000","dateStarted":"2016-10-25T11:58:48+0000","dateFinished":"2016-10-25T11:58:50+0000","status":"FINISHED","progressUpdateIntervalMs":500,"focus":true,"$$hashKey":"object:278"},{"title":"Dependency Loader","text":"%spark.dep\nz.addRepo(\"apache-snapshots\").url(\"https://repository.apache.org/content/repositories/snapshots\").snapshot()\nz.load(\"org.apache.streams:streams-provider-twitter:0.4-incubating-SNAPSHOT\")\nz.load(\"org.apache.streams:streams-converters:0.4-incubating-SNAPSHOT\")","dateUpdated":"2016-10-28T13:36:32+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true,"editorMode":"ace/mode/scala","title":true},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477439360400_267640902","id":"20161025-234920_-1461959171","result":{"code":"ERROR","type":"TEXT","msg":"Must be used before SparkInterpreter (%spark) initialized\nHint: put this paragraph before any Spark code and restart Zeppelin/Interpreter"},"dateCreated":"2016-10-25T11:49:20+0000","dateStarted":"2016-10-28T13:36:33+0000","dateFinished":"2016-10-28T13:36:33+0000","status":"ERROR","progressUpdateIntervalMs":500,"$$hashKey":"object:279","focus":true},{"title":"Build 'hocon', the Apache Streams Config","text":"%spark\n\nval consumerKey = z.input(\"ConsumerKey\", \"\")\nval consumerSecret = z.input(\"ConsumerSecret\", \"\")\nval accessToken = z.input(\"AccessToken\", \"\")\nval accessTokenSecret = z.input(\"AccessTokenSecret\", \"\")\nval userID = z.input(\"UserID\", \"\")\n\nval hocon = s\"\"\"\n twitter {\n oauth {\n consumerKey = \"$consumerKey\"\n consumerSecret = \"$consumerSecret\"\n accessToken = \"$accessToken\"\n accessTokenSecret = \"$accessTokenSecret\"\n }\n retrySleepMs = 5000\n retryMax = 250\n info = [\n $userID\n ]\n }\n\"\"\"\n","dateUpdated":"2016-10-26T21:50:31+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true,"editorMode":"ace/mode/scala","editorHide":false,"title":true,"tableHide":false},"settings":{"params":{"ConsumerKey":"","ConsumerSecret":"","AccessToken":"","AccessTokenSecret":"","Username":"1566016094","UserID":"1566016094"},"forms":{"ConsumerKey":{"name":"ConsumerKey","displayName":"ConsumerKey","type":"input","defaultValue":"","hidden":false},"ConsumerSecret":{"name":"ConsumerSecret","displayName":"ConsumerSecret","type":"input","defaultValue":"","hidden":false},"AccessToken":{"name":"AccessToken","displayName":"AccessToken","type":"input","defaultValue":"","hidden":false},"AccessTokenSecret":{"name":"AccessTokenSecret","displayName":"AccessTokenSecret","type":"input","defaultValue":"","hidden":false},"UserID":{"name":"UserID","displayName":"UserID","type":"input","defaultValue":"","hidden":false}}},"apps":[],"jobName":"paragraph_1477250022469_546929331","id":"20161023-191342_1492908722","result":{"code":"SUCCESS","type":"TEXT","msg":""},"dateCreated":"2016-10-23T07:13:42+0000","dateStarted":"2016-10-26T21:50:31+0000","dateFinished":"2016-10-26T21:51:13+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:280"},{"title":"Apache Streams Collects Tweets from Timeline","text":"%spark\nimport com.typesafe.config._\nimport org.apache.streams.config._\nimport org.apache.streams.core._\nimport java.util.Iterator\nimport org.apache.streams.twitter.TwitterUserInformationConfiguration\n\n\nimport org.apache.streams.twitter.pojo._\nimport org.apache.streams.twitter.provider._\n\nval timeline_buf = scala.collection.mutable.ArrayBuffer.empty[Object]\n\nval typesafe = ConfigFactory.parseString(hocon)\nval config = new ComponentConfigurator(classOf[TwitterUserInformationConfiguration]).detectConfiguration(typesafe, \"twitter\");\nval provider = new TwitterTimelineProvider(config);\nprovider.prepare(null)\nprovider.startStream()\nwhile(provider.isRunning()) {\n val resultSet = provider.readCurrent()\n resultSet.size()\n val iterator = resultSet.iterator();\n while(iterator.hasNext()) {\n val datum = iterator.next();\n //println(datum.getDocument)\n timeline_buf += datum.getDocument\n } \n}","dateUpdated":"2016-10-26T21:52:04+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true,"editorMode":"ace/mode/markdown","title":true,"editorHide":true},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477420875861_-7931338","id":"20161025-184115_-1493939533","result":{"code":"SUCCESS","type":"TEXT","msg":""},"dateCreated":"2016-10-25T06:41:15+0000","dateStarted":"2016-10-26T21:51:22+0000","dateFinished":"2016-10-26T21:51:36+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:281"},{"text":"%spark\n\nimport org.apache.streams.converter.ActivityConverterProcessor\nimport org.apache.streams.core.StreamsProcessor\nimport org.apache.streams.pojo.json.Activity\nimport scala.collection.JavaConverters\nimport scala.collection.JavaConversions._\n\nval converter = new ActivityConverterProcessor()\nconverter.prepare()\n\nval status_datums = timeline_buf.map(x => new StreamsDatum(x))\nval activity_datums = status_datums.flatMap(x => converter.process(x)).map(x => x.getDocument.asInstanceOf[Activity])\n","dateUpdated":"2016-10-28T13:10:37+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true,"editorMode":"ace/mode/markdown","title":true},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477518189522_-376171716","id":"20161026-214309_-1369615445","result":{"code":"SUCCESS","type":"TEXT","msg":"\nimport org.apache.streams.converter.ActivityConverterProcessor\n\nimport org.apache.streams.core.StreamsProcessor\n\nimport org.apache.streams.pojo.json.Activity\n\nimport scala.collection.JavaConverters\n\nimport scala.collection.JavaConversions._\n\nconverter: org.apache.streams.converter.ActivityConverterProcessor = org.apache.streams.converter.ActivityConverterProcessor@496933ba\n\nstatus_datums: scala.collection.mutable.ArrayBuffer[org.apache.streams.core.StreamsDatum] = \nArrayBuffer(null\tMetadata={}\tTimestamp=null\tSequence=null\tDocument=org.apache.streams.twitter.pojo.Tweet@6c3fa19d[text=RT @Ellen_Friedman: In Ch 3 of new book Intro to #ApacheFlink we explain how Flink provides a better fit to data. Download free pdf https:/…,retweeted=true,inReplyToScreenName=Pick a few twitter accounts to research
\n"},"dateCreated":"2016-10-23T07:14:13+0000","dateStarted":"2016-10-23T07:15:02+0000","dateFinished":"2016-10-23T07:15:02+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:287"},{"text":"%md\nPull info on those accounts","dateUpdated":"2016-10-23T07:16:15+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true,"editorMode":"ace/mode/markdown"},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477250158983_503619627","id":"20161023-191558_-307359199","result":{"code":"SUCCESS","type":"HTML","msg":"Pull info on those accounts
\n"},"dateCreated":"2016-10-23T07:15:58+0000","dateStarted":"2016-10-23T07:16:15+0000","dateFinished":"2016-10-23T07:16:15+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:288"},{"text":"%md\nPull friends of those accounts","dateUpdated":"2016-10-23T07:15:27+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477250101867_1674182312","id":"20161023-191501_-411136591","result":{"code":"SUCCESS","type":"HTML","msg":"Pull friends of those accounts
\n"},"dateCreated":"2016-10-23T07:15:01+0000","dateStarted":"2016-10-23T07:15:27+0000","dateFinished":"2016-10-23T07:15:27+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:289"},{"text":"%md\nPull all content by these accounts","dateUpdated":"2016-10-23T07:17:04+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477250127412_-519088922","id":"20161023-191527_1928267114","result":{"code":"SUCCESS","type":"HTML","msg":"Pull all content by these accounts
\n"},"dateCreated":"2016-10-23T07:15:27+0000","dateStarted":"2016-10-23T07:17:04+0000","dateFinished":"2016-10-23T07:17:04+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:290"},{"text":"%md\nNormalize user(s) -> page(s)","dateUpdated":"2016-10-23T07:17:21+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477250194079_166826422","id":"20161023-191634_-1435819396","result":{"code":"SUCCESS","type":"HTML","msg":"Normalize user(s) -> page(s)
\n"},"dateCreated":"2016-10-23T07:16:34+0000","dateStarted":"2016-10-23T07:16:51+0000","dateFinished":"2016-10-23T07:16:51+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:291"},{"text":"%md\nNormalize status(es) -> post(s)","dateUpdated":"2016-10-23T07:17:04+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477250211090_-1984674104","id":"20161023-191651_1858788600","result":{"code":"SUCCESS","type":"HTML","msg":"Normalize status(es) -> post(s)
\n"},"dateCreated":"2016-10-23T07:16:51+0000","dateStarted":"2016-10-23T07:17:05+0000","dateFinished":"2016-10-23T07:17:05+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:292"},{"text":"%md\nPut page(s) in dataframe(s)","dateUpdated":"2016-10-24T08:38:51+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477250224610_-86292382","id":"20161023-191704_-1463437142","result":{"code":"SUCCESS","type":"HTML","msg":"Put page(s) in dataframe(s)
\n"},"dateCreated":"2016-10-23T07:17:04+0000","dateStarted":"2016-10-24T08:38:51+0000","dateFinished":"2016-10-24T08:38:51+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:293"},{"text":"%md\nPut post(s) in dataframe(s)","dateUpdated":"2016-10-24T08:38:49+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true,"editorMode":"ace/mode/markdown"},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477250299738_-122920149","id":"20161023-191819_1405823231","result":{"code":"SUCCESS","type":"HTML","msg":"Put post(s) in dataframe(s)
\n"},"dateCreated":"2016-10-23T07:18:19+0000","dateStarted":"2016-10-24T08:38:50+0000","dateFinished":"2016-10-24T08:38:50+0000","status":"FINISHED","progressUpdateIntervalMs":500,"$$hashKey":"object:294"},{"text":"%md\n","dateUpdated":"2016-10-23T07:18:27+0000","config":{"colWidth":12,"graph":{"mode":"table","height":300,"optionOpen":false,"keys":[],"values":[],"groups":[],"scatter":{},"map":{"baseMapType":"Streets","isOnline":true,"pinCols":[]}},"enabled":true},"settings":{"params":{},"forms":{}},"apps":[],"jobName":"paragraph_1477250307539_1269116696","id":"20161023-191827_1882228590","dateCreated":"2016-10-23T07:18:27+0000","status":"READY","progressUpdateIntervalMs":500,"$$hashKey":"object:295"}],"name":"Twitter","id":"2C1AA31WA","angularObjects":{"2C2ACDU5K:shared_process":[],"2C2BWWPYV:shared_process":[],"2BYCF8FE8:shared_process":[],"2C1NGJC34:shared_process":[],"2C1SDFHDA:shared_process":[],"2C1QP4THZ:shared_process":[],"2C17CC7FC:shared_process":[],"2BY14D25S:shared_process":[],"2BYDXYFW2:shared_process":[],"2BYSPUWEA:shared_process":[],"2BY5XP9RJ:shared_process":[],"2C1XZ19Z5:shared_process":[],"2BZF3H32Q:shared_process":[],"2C1XX42KW:shared_process":[],"2C2XJZ5E2:shared_process":[],"2C1KP238Y:shared_process":[],"2C21VK8T2:shared_process":[],"2BYN1EBZH:shared_process":[]},"config":{"looknfeel":"default"},"info":{}}