-
Notifications
You must be signed in to change notification settings - Fork 0
/
TwitterCreek2.R
79 lines (77 loc) · 2.33 KB
/
TwitterCreek2.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
############################
# Written by A. Bertoli
# Additions by B. Zhang
TwitterCreek2=function(file.name, timeout = 0, tweets = NULL, p=0.01, oauth = NULL,
verbose = TRUE)
{
if (!is.null(oauth)) {
library(ROAuth)
}
open.in.memory <- FALSE
if (is.null(oauth)) {
stop("No authentication method was provided. \n Please use an OAuth token.")
}
if (!is.null(oauth)) {
if (!inherits(oauth, "OAuth")) {
stop("oauth argument must be of class OAuth")
}
if (!oauth$handshakeComplete) {
stop("Oauth needs to complete its handshake. See ?filterStream.")
}
}
i <- 0
if (verbose == TRUE)
message("Capturing tweets...")
if (nchar(file.name) == 0) {
open.in.memory <- TRUE
file.name <- tempfile()
}
conn <- file(description = file.name, open = "a")
write.tweets <- function(x) {
p=p*100
keep=sample(c(0,1),1,prob=c(1-p,p))
if(keep==1){
if (nchar(x) > 0) {
i <<- i + 1
writeLines(x, conn, sep = "")
}
}}
if (!is.null(tweets) && is.numeric(tweets) && tweets > 0) {
write.tweets <- function(x) {
if (i >= tweets) {
break
}
if (nchar(x) > 0) {
i <<- i + 1
writeLines(x, conn, sep = "")
}
}
}
init <- Sys.time()
url <- "https://stream.twitter.com/1.1/statuses/sample.json"
if (!is.null(oauth)) {
output <- tryCatch(oauth$OAuthRequest(URL = url, params = list(),
method = "POST", customHeader = NULL, cainfo = system.file("CurlSSL",
"cacert.pem", package = "RCurl"), writefunction = write.tweets,
timeout = timeout), error = function(e) e)
}
close(conn)
seconds <- round(as.numeric(difftime(Sys.time(), init, units = "secs")),
0)
if (open.in.memory == TRUE) {
raw.tweets <- readLines(file.name, warn = FALSE, encoding = "UTF-8")
if (verbose == TRUE) {
m1 <- paste(seconds, "sec", length(raw.tweets),
"tweets", sep=" ")
return(m1)
}
unlink(file.name)
return(raw.tweets)
}
if (open.in.memory == FALSE) {
if (verbose == TRUE) {
m2 <- paste(seconds,"sec", i, "tweets",sep=" ")
return(m2)
}
}
}