diff --git a/.RData b/.RData
new file mode 100644
index 0000000..d8858bb
Binary files /dev/null and b/.RData differ
diff --git a/.Rhistory b/.Rhistory
index 555ce24..35e5c6e 100644
--- a/.Rhistory
+++ b/.Rhistory
@@ -1,142 +1,18 @@
-install.packages("jsonlite")
-install.packages(c("BH", "dplyr", "Lahman", "magrittr", "maps", "sp", "xtable"))
-setwd("/home/max/Dokumente/Uni/Aktuell/BA-Arbeit/R-Code")
-setwd("/home/max/Dokumente/Uni/Aktuell/BA-Arbeit/R-Code")
-setwd("~/")
-setwd("~/Dokumente/Uni/Aktuell/BA-Arbeit/R-Code")
-ls()
-# Set curl handle for friendly scraping
-handle <- getCurlHandle(httpheader = list(from = "max.mehl@uni.kn",
-'user-agent' = str_c(R.version$version.string)
-)
-)
-source("functions.R")
-handle <- getCurlHandle(httpheader = list(from = "max.mehl@uni.kn",
-'user-agent' = str_c(R.version$version.string)
-)
-)
-require(stringr)
-require(RCurl)
-handle <- getCurlHandle(httpheader = list(from = "max.mehl@uni.kn",
-'user-agent' = str_c(R.version$version.string)
-)
-)
-acc_url <- "http://www.bundestwitter.de/api/politiker"
-source("functions.R")
-require(jsonlite)
-fromJSON(acc)
-fromJSON(acc_url)
-require(httr)
-install.packages("httr")
-require(httr)
-fromJSON(acc_url)
-df <- fromJSON(acc_url)
-View(df)
-require(jsonlite)
-require(stringr)
-require(RCurl)
-require(httr)
-source("functions.R")
-setwd("~/Dokumente/Uni/Aktuell/BA-Arbeit/R-Code")
-# Set curl handle for friendly scraping
-handle <- getCurlHandle(httpheader = list(from = "max.mehl@uni.kn",
-'user-agent' = str_c(R.version$version.string)
-)
-)
-acc_url <- "http://www.bundestwitter.de/api/politiker"
-df <- fromJSON(acc_url)
-setwd("~/Dokumente/Uni/Aktuell/BA-Arbeit/uni-ba-issuecomp")
-View(df)
-acc_df <- fromJSON(acc_url)
-rm df
-rm(df)
-View(acc_df)
-install.packages("twitteR")
-require(twitteR)
-userTimeline(user = "peteraltmaier", n = "20")
-read("twitter-api-keys.txt")
-read.csv(file = "twitter-api-keys.txt", header = TRUE, sep = ";")
-read.csv(file = "twitter-api-keys.txt", header = TRUE, sep = ";")
-read.csv(file = "twitter-api-keys.txt", header = TRUE, sep = ";")
-oauth <- read.csv(file = "twitter-api-keys.txt", header = TRUE, sep = ";")
-View(oauth)
-getTwitterOAuth(oauth$ConsumerKey, oauth$ConsumerSecret)
-readLines("twitter-api-consumerkey.txt")
-oauthKey <- readLines("twitter-api-consumerkey.txt")
-oauthSec <- readLines("twitter-api-consumersecret.txt")
-rm(oauth)
-getTwitterOAuth(oauthKey, oauthSec)
-getTwitterOAuth(oauthKey, oauthSec)
-reqURL <- "https://api.twitter.com/oauth/request_token"
-accessURL <- "https://api.twitter.com/oauth/access_token"
-authURL <- "https://api.twitter.com/oauth/authorize"
-consumerKey <- readLines("twitter-api-consumerkey.txt")
-consumerSecret <- readLines("twitter-api-consumersecret.txt")
-twitCred <- OAuthFactory$new(consumerKey=consumerKey,
-consumerSecret=consumerSecret,
-requestURL=reqURL,
-accessURL=accessURL,
-authURL=authURL)
-twitCred$handshake()
-rm(list=ls())
-require(jsonlite)
-require(stringr)
-require(RCurl)
-require(httr)
-require(twitteR)
-source("functions.R")
-setwd("~/Dokumente/Uni/Aktuell/BA-Arbeit/uni-ba-issuecomp")
-# Set curl handle for friendly scraping
-handle <- getCurlHandle(httpheader = list(from = "max.mehl@uni.kn",
-'user-agent' = str_c(R.version$version.string)
-)
-)
-acc_url <- "http://www.bundestwitter.de/api/politiker"
-acc_df <- fromJSON(acc_url)
-# --------------
-twAPI_reqURL <- "https://api.twitter.com/oauth/request_token"
-twAPI_accessURL <- "https://api.twitter.com/oauth/access_token"
-twAPI_authURL <- "https://api.twitter.com/oauth/authorize"
-twAPI_consumerKey <- readLines("twitter-api-consumerkey.txt")
-twAPI_consumerSecret <- readLines("twitter-api-consumersecret.txt")
-twAPI_twitCred <- OAuthFactory$new(consumerKey=consumerKey,
-consumerSecret=consumerSecret,
-requestURL=reqURL,
-accessURL=accessURL,
-authURL=authURL)
-twAPI_twitCred$handshake()
-registerTwitterOAuth(twAPI_twitCred)
-twAPI_reqURL <- "https://api.twitter.com/oauth/request_token"
-twAPI_accessURL <- "https://api.twitter.com/oauth/access_token"
-twAPI_authURL <- "https://api.twitter.com/oauth/authorize"
-twAPI_consumerKey <- readLines("twitter-api-consumerkey.txt")
-twAPI_consumerSecret <- readLines("twitter-api-consumersecret.txt")
-twAPI_twitCred <- OAuthFactory$new(consumerKey=twAPI_consumerKey,
-consumerSecret=twAPI_consumerSecret,
-requestURL=twAPI_reqURL,
-accessURL=twAPI_accessURL,
-authURL=twAPI_authURL)
-twAPI_twitCred$handshake()
-twAPI_twitCred$handshake()
-registerTwitterOAuth(twAPI_twitCred)
-registerTwitterOAuth(twAPI_twitCred)
-userTimeline(user = "peteraltmaier", n = "20")
-userTimeline(user = "peteraltmaier", n = "20", includeRts = TRUE)
-showStatus("530033823577550848")
-getUser("peteraltmaier")
-getUser("mxmehl")
-lookupUsers("mxmehl")
-userTimeline(user = "peteraltmaier", n = "20", includeRts = TRUE)
-wd
-userTimeline(user = "peteraltmaier", n = "20", includeRts = TRUE)
-userTimeline(user = "peteraltmaier", n = "20", includeRts = TRUE)
-lookupUsers("mxmehl")
-lookupUsers("mxmehl")
-install.packages("devtools")
-require(devtools)
-devtools::install_github("joyofdata/RTwitterAPI")
-require(RTwitterAPI)
-arams <- c(
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+View(tweets_full)
+api_params <- c(
"oauth_consumer_key" = "c9Ob2fWNSONMC0mA2JlNaeRke",
"oauth_nonce" = NA,
"oauth_signature_method" = "HMAC-SHA1",
@@ -145,9 +21,258 @@ arams <- c(
"oauth_version" = "1.0",
"consumer_secret" = "cZ3Il2hmbLgK0Lc57mj5kUvymjVdsmZKYwKOGHR3NhCpvWgEOI",
"oauth_token_secret" = "rvfv8MgexFKTqrPNSoGrdrZVNhV4fTJb2Bgz249nbvKNg"
-);
-rm(arams)
-params <- c(
+)
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "10"
+max_id <- "454359322768990208"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+query <- c(include_rts=1, exclude_replies="true", trim_user="true", include_entities="false",
+screen_name=user,
+count=max_count,
+max_id=max_id);
+if(exists("tweets_full")) {
+tweets_temp <- fromJSON(correctJSON(twitter_api_call(api_url, query, api_params)))
+tweets_temp <- tweets_temp[keep]
+tweets_full <- insertRow(tweets_full, tweets_temp)
+}
+else {
+tweets_full <- fromJSON(correctJSON(twitter_api_call(api_url, query, api_params)))
+tweets_full <- tweets_full[keep]
+}
+status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+if (status) {
+rm(tweets_temp)
+for(r in 1:nrow(tweets_full)) {
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+View(tweets_full)
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "200"
+max_id <- "999999999999999999"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+query <- c(include_rts=1, exclude_replies="true", trim_user="true", include_entities="false",
+screen_name=user,
+count=max_count,
+max_id=max_id);
+if(exists("tweets_full")) {
+tweets_temp <- fromJSON(correctJSON(twitter_api_call(api_url, query, api_params)))
+tweets_temp <- tweets_temp[keep]
+tweets_full <- insertRow(tweets_full, tweets_temp)
+}
+else {
+tweets_full <- fromJSON(correctJSON(twitter_api_call(api_url, query, api_params)))
+tweets_full <- tweets_full[keep]
+}
+status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+if (status) {
+rm(tweets_temp)
+for(r in 1:nrow(tweets_full)) {
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+tweets_temp <- fromJSON(correctJSON(twitter_api_call(api_url, query, api_params)))
+current <- twitter_api_call(api_url, query, api_params)
+correctJSON(current)
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "200"
+max_id <- "999999999999999999"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+query <- c(include_rts=1, exclude_replies="true", trim_user="true", include_entities="false",
+screen_name=user,
+count=max_count,
+max_id=max_id);
+if(exists("tweets_full")) {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_temp <- fromJSON(correctJSON(current))
+tweets_temp <- tweets_temp[keep]
+tweets_full <- insertRow(tweets_full, tweets_temp)
+}
+else {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_full <- fromJSON(correctJSON(current))
+tweets_full <- tweets_full[keep]
+}
+status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+if (status) {
+rm(tweets_temp)
+for(r in 1:nrow(tweets_full)) {
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+current
+string <- current
+string <- str_replace_all(string, pattern = perl('\\\\(?![tn"])'), replacement = " ")
+string <- str_replace_all(string, pattern = fixed("\n"), replacement = " ")
+str_replace(string, pattern = fixed("\n"), replacement = "X-X-X-X")
+str_replace_all(string, pattern = fixed("\n"), replacement = "X-X-X-X")
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "10"
+max_id <- "999999999999999999"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+query <- c(include_rts=1, exclude_replies="true", trim_user="true", include_entities="false",
+screen_name=user,
+count=max_count,
+max_id=max_id);
+if(exists("tweets_full")) {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_temp <- fromJSON(correctJSON(current))
+tweets_temp <- tweets_temp[keep]
+tweets_full <- insertRow(tweets_full, tweets_temp)
+}
+else {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_full <- fromJSON(correctJSON(current))
+tweets_full <- tweets_full[keep]
+}
+status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+if (status) {
+rm(tweets_temp)
+for(r in 1:nrow(tweets_full)) {
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+View(tweets_full)
+View(tweets_temp)
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "20"
+max_id <- "999999999999999999"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+query <- c(include_rts=1, exclude_replies="true", trim_user="true", include_entities="false",
+screen_name=user,
+count=max_count,
+max_id=max_id);
+if(exists("tweets_full")) {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_temp <- fromJSON(correctJSON(current))
+tweets_temp <- tweets_temp[keep]
+tweets_full <- insertRow(tweets_full, tweets_temp)
+}
+else {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_full <- fromJSON(correctJSON(current))
+tweets_full <- tweets_full[keep]
+}
+status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+if (status) {
+rm(tweets_temp)
+for(r in 1:nrow(tweets_full)) {
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+View(tweets_full)
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "10"
+max_id <- "999999999999999999"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+query <- c(include_rts=1, exclude_replies="false", trim_user="true", include_entities="false",
+screen_name=user,
+count=max_count,
+max_id=max_id);
+if(exists("tweets_full")) {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_temp <- fromJSON(correctJSON(current))
+tweets_temp <- tweets_temp[keep]
+tweets_full <- insertRow(tweets_full, tweets_temp)
+}
+else {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_full <- fromJSON(correctJSON(current))
+tweets_full <- tweets_full[keep]
+}
+status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+if (status) {
+rm(tweets_temp)
+for(r in 1:nrow(tweets_full)) {
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+View(tweets_full)
+api_params <- c(
"oauth_consumer_key" = "c9Ob2fWNSONMC0mA2JlNaeRke",
"oauth_nonce" = NA,
"oauth_signature_method" = "HMAC-SHA1",
@@ -156,83 +281,232 @@ params <- c(
"oauth_version" = "1.0",
"consumer_secret" = "cZ3Il2hmbLgK0Lc57mj5kUvymjVdsmZKYwKOGHR3NhCpvWgEOI",
"oauth_token_secret" = "rvfv8MgexFKTqrPNSoGrdrZVNhV4fTJb2Bgz249nbvKNg"
-);
-rm(twAPI_*)
-rm(twAPI_)
-rm(twAPI_accessURL)
-params <- c(
-"oauth_consumer_key" = "c9Ob2fWNSONMC0mA2JlNaeRke",
-"oauth_nonce" = NA,
-"oauth_signature_method" = "HMAC-SHA1",
-"oauth_timestamp" = NA,
-"oauth_token" = "1007025684-RFxCDFc4OPkt02bASmdci00TB4jgaPjfqxLRT58",
-"oauth_version" = "1.0",
-"consumer_secret" = "cZ3Il2hmbLgK0Lc57mj5kUvymjVdsmZKYwKOGHR3NhCpvWgEOI",
-"oauth_token_secret" = "rvfv8MgexFKTqrPNSoGrdrZVNhV4fTJb2Bgz249nbvKNg"
-);
-url <- "https://api.twitter.com/1.1/friends/ids.json";
-query <- c(cursor=-1, screen_name="hrw", count=10);
-result <- RTwitterAPI::twitter_api_call(url, query, params)
-result
-url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
-query <- c(screen_name="peteraltmaier", exclude_replies="true", include_rts="true");
-result <- RTwitterAPI::twitter_api_call(url, query, params)
-result
-query <- c(screen_name="peteraltmaier", exclude_replies="true", include_rts="true", count="5");
-result <- fromJSON(RTwitterAPI::twitter_api_call(url, query, params))
-result
-query <- c(screen_name="peteraltmaier", exclude_replies="true", include_rts=1, count="5");
-result <- fromJSON(RTwitterAPI::twitter_api_call(url, query, params))
-query <- c(screen_name="peteraltmaier", exclude_replies="true", include_rts=1, count="1");
-result <- fromJSON(RTwitterAPI::twitter_api_call(url, query, params))
-query <- c(screen_name="peteraltmaier", exclude_replies="true", include_rts=1, count="20");
-result <- fromJSON(RTwitterAPI::twitter_api_call(url, query, params))
-query <- c(screen_name="peteraltmaier", exclude_replies="true", include_rts=1, count="1");
-result <- fromJSON(RTwitterAPI::twitter_api_call(url, query, params))
-result
-result[[1]]
-result[[1]]$created_at
-result[[1]]$id_str
-result[[1]]$text
-require(jsonlite)
-require(stringr)
-require(RCurl)
-require(httr)
-require(twitteR)
-require(devtools)
-require(RTwitterAPI)
-source("functions.R")
-setwd("~/Dokumente/Uni/Aktuell/BA-Arbeit/uni-ba-issuecomp")
-# Set curl handle for friendly scraping
-handle <- getCurlHandle(httpheader = list(from = "max.mehl@uni.kn",
-'user-agent' = str_c(R.version$version.string)
)
-)
-acc_url <- "http://www.bundestwitter.de/api/politiker"
-acc_df <- fromJSON(acc_url)
-require(jsonlite)
-require(stringr)
-require(RCurl)
-require(httr)
-require(twitteR)
-require(devtools)
-require(RTwitterAPI)
-source("functions.R")
-setwd("~/Dokumente/Uni/Aktuell/BA-Arbeit/uni-ba-issuecomp")
-# Set curl handle for friendly scraping
-handle <- getCurlHandle(httpheader = list(from = "max.mehl@uni.kn",
-'user-agent' = str_c(R.version$version.string)
-)
-)
-acc_url <- "http://www.bundestwitter.de/api/politiker"
-acc_df <- fromJSON(acc_url)
-acc_df <- fromJSON(acc_url)
-acc_url <- "http://www.bundestwitter.de/api/politiker"
-acc_df <- fromJSON(acc_url)
-acc_url <- "http://www.bundestwitter.de/api/politiker"
-acc_df <- fromJSON(acc_url)
-acc_jsonreadLines("politiker.txt")
-acc_json <- readLines("politiker.txt")
-acc_df <- fromJSON(acc_json)
-acc_df$name
-acc_df[[1]]$name
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "10"
+max_id <- "999999999999999999"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+query <- c(include_rts=1, exclude_replies="false", trim_user="true", include_entities="false",
+screen_name=user,
+count=max_count,
+max_id=max_id);
+if(exists("tweets_full")) {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_temp <- fromJSON(correctJSON(current))
+tweets_temp <- tweets_temp[keep]
+tweets_full <- insertRow(tweets_full, tweets_temp)
+}
+else {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_full <- fromJSON(correctJSON(current))
+tweets_full <- tweets_full[keep]
+}
+status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+if (status) {
+rm(tweets_temp)
+for(r in 1:nrow(tweets_full)) {
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+current
+correctJSON(current)
+validate(current)
+string <- current
+str_replace_all(string, pattern = fixed("\n"), replacement = " ")
+current
+fromJSON(current)
+str_replace_all(string, pattern = fixed("\n"), replacement = " ")
+str_replace_all(string, pattern = fixed("ewifjweaoegj"), replacement = " ")
+str_detect(string, pattern = fixed("ewifjweaoegj"))
+str_detect(string, pattern = fixed("ewifjweaoegj"))
+str_detect(string, pattern = fixed("wfwe"))
+str_detect(string, pattern = fixed("peter"))
+str_detect(string, pattern = "kefme")
+str_detect(string, pattern = "\n")
+str_detect(string, pattern = "\\n")
+string <- str_replace_all(string, pattern = fixed("\n"), replacement = " ")
+string <- "bla bla \nwoqdwqowd"
+string
+str_replace_all(string, pattern = fixed("\n"), replacement = " ")
+string <- str_replace_all(string, pattern = "\n", replacement = " ")
+string
+correctJSON <- function(string) {
+string <- str_replace_all(string, pattern = perl('\\\\(?![tn"])'), replacement = " ")
+string <- str_replace_all(string, pattern = "\n", replacement = " ")
+string <- str_replace_all(string, pattern = "\r", replacement = " ")
+string <- str_replace_all(string, pattern = fixed("^"), replacement = " ")
+return(string)
+}
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "200"
+max_id <- "999999999999999999"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+query <- c(include_rts=1, exclude_replies="true", trim_user="true", include_entities="false",
+screen_name=user,
+count=max_count,
+max_id=max_id);
+if(exists("tweets_full")) {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_temp <- fromJSON(correctJSON(current))
+tweets_temp <- tweets_temp[keep]
+tweets_full <- insertRow(tweets_full, tweets_temp)
+}
+else {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_full <- fromJSON(correctJSON(current))
+tweets_full <- tweets_full[keep]
+}
+status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+if (status) {
+rm(tweets_temp)
+for(r in 1:nrow(tweets_full)) {
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+current
+tweets_temp <- fromJSON(correctJSON(current))
+correctJSON(current)
+string <- current
+str_replace_all(string, pattern = perl('\\\\(?![tn"])'), replacement = " ")
+str_replace_all(string, pattern = "\n", replacement = " ")
+str_replace_all(string, pattern = "\r", replacement = " ")
+str_replace_all(string, pattern = fixed("^"), replacement = " ")
+str_replace_all(string, pattern = "^", replacement = " ")
+correctJSON <- function(string) {
+string <- str_replace_all(string, pattern = perl('\\\\(?![tn"])'), replacement = " ")
+string <- str_replace_all(string, pattern = "\n", replacement = " ")
+string <- str_replace_all(string, pattern = "\r", replacement = " ")
+string <- str_replace_all(string, pattern = "^", replacement = " ")
+return(string)
+}
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "200"
+max_id <- "999999999999999999"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+query <- c(include_rts=1, exclude_replies="true", trim_user="true", include_entities="false",
+screen_name=user,
+count=max_count,
+max_id=max_id);
+if(exists("tweets_full")) {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_temp <- fromJSON(correctJSON(current))
+tweets_temp <- tweets_temp[keep]
+tweets_full <- insertRow(tweets_full, tweets_temp)
+}
+else {
+current <- twitter_api_call(api_url, query, api_params)
+tweets_full <- fromJSON(correctJSON(current))
+tweets_full <- tweets_full[keep]
+}
+status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+if (status) {
+rm(tweets_temp)
+for(r in 1:nrow(tweets_full)) {
+status <- str_detect(tweets_full$created_at[r], "2013$")
+if(is.na(status)) { status <- FALSE }
+if(status) {
+tweets_full <- tweets_full[-r,]
+}
+}
+break
+}
+else {
+max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+loop <- loop + 1
+}
+}
+current
+str_replace_all(string, pattern = "^", replacement = " ")
+current
+correctJSON <- function(string) {
+string <- str_replace_all(string, pattern = perl('\\\\(?![tn"])'), replacement = " ")
+string <- str_replace_all(string, pattern = "\n", replacement = " ")
+string <- str_replace_all(string, pattern = "\r", replacement = " ")
+string <- str_replace_all(string, pattern = "^", replacement = " ")
+return(string)
+}
+tweets_temp <- fromJSON(correctJSON(current))
+fromJSON(current)
+validate(correctJSON(current))
+current
+str_extract_all(string, pattern = "\n")
+str_extract_all(string, pattern = "\xed")
+str_extract_all(string, pattern = "\[:alnum:]{3}")
+str_extract_all(string, pattern = "\[[:alnum:]]{3}")
+str_extract_all(string, pattern = "\\[[:alnum:]]{3}")
+str_extract_all(string, pattern = "\([[:alnum:]]{3})")
+str_extract_all(string, pattern = "\\([[:alnum:]]{3})")
+str_extract_all(string, pattern = "([[:alnum:]]{3})")
+str_extract_all(string, pattern = "\x..")
+str_extract_all(string, pattern = "\\x..")
+str_extract_all(string, pattern = "\x..")
+str_extract_all(string, pattern = "\xed")
+str_extract_all(string, pattern = "\x")
+str_extract_all(string, pattern = "\x+")
+str_extract_all(string, pattern = "\x.+")
+str_extract_all(string, pattern = "\x")
+str_extract_all(string, pattern = "\xhh")
+str_extract_all(string, pattern = "\xxx")
+str_extract_all(string, pattern = "[[:xdigit:]]")
+str_extract_all(string, pattern = "(\xhh)")
+str_extract_all(string, pattern = "[\xhh]")
+str_extract_all(string, pattern = "\xHH")
+str_extract_all(string, pattern = "\xa0")
+str_extract_all(string, pattern = "\xba?")
+str_extract_all(string, pattern = "(\xba)+?")
+str_extract_all(string, pattern = "(\xba)?")
+str_extract_all(string, pattern = "(\xba)")
+str_extract_all(string, pattern = "\xba")
+str_extract_all(string, pattern = "\xba")
+str_extract_all(string, pattern = "\xed")
+str_extract_all(string, pattern = "(\xed)")
+str_extract_all(string, pattern = "(\xed)?")
+str_extract_all(string, pattern = "(\xed)+")
+str_extract_all(string, pattern = "(\xed)+?")
+str_extract_all(string, pattern = "\xed")
+write(string, "temp.txt")
+Encoding("temp.txt")
+readLines("temp.txt")
+validate(string)
+string <- readLines("temp.txt")
+validate(string)
+string <- str_replace_all(string, pattern = perl('\\\\(?![tn"])'), replacement = " ")
+string <- str_replace_all(string, pattern = "\n", replacement = " ")
+string <- str_replace_all(string, pattern = "\r", replacement = " ")
+string <- str_replace_all(string, pattern = "^", replacement = " ")
+validate(string)
+fromJSON("temp.txt")
+current
+fromJSON(current)
diff --git a/extract-twitter-accounts.R b/extract-twitter-accounts.R
index fd21a7a..ee50b56 100644
--- a/extract-twitter-accounts.R
+++ b/extract-twitter-accounts.R
@@ -15,16 +15,27 @@ handle <- getCurlHandle(httpheader = list(from = "max.mehl@uni.kn",
)
acc_url <- "http://www.bundestwitter.de/api/politiker"
-acc_json <- readLines("politiker.txt")
-acc_df <- fromJSON(acc_json)
+#acc_json <- readLines("politiker.txt")
+acc_df <- fromJSON(acc_url)
# --------------
+
+
+url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+query <- c(screen_name="mxmehl", include_rts=1, count="200", exclude_replies="true", trim_user="true", include_entities="false");
+
+as.character(as.numeric(result$id_str[nrow(result)]) - 1)
+str_detect(result$created_at[nrow(result)], "2013$")
+
+result <- fromJSON(correctJSON(twitter_api_call(url, query, params)))
+
+# ---------------
# http://www.joyofdata.de/blog/twitters-rest-api-v1-1-with-r-for-linux-and-windows/
# devtools::install_github("joyofdata/RTwitterAPI")
-params <- c(
+api_params <- c(
"oauth_consumer_key" = "c9Ob2fWNSONMC0mA2JlNaeRke",
"oauth_nonce" = NA,
"oauth_signature_method" = "HMAC-SHA1",
@@ -33,18 +44,49 @@ params <- c(
"oauth_version" = "1.0",
"consumer_secret" = "cZ3Il2hmbLgK0Lc57mj5kUvymjVdsmZKYwKOGHR3NhCpvWgEOI",
"oauth_token_secret" = "rvfv8MgexFKTqrPNSoGrdrZVNhV4fTJb2Bgz249nbvKNg"
-);
+)
-url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
-query <- c(screen_name="mxmehl", include_rts=1, count="200", exclude_replies="true", trim_user="true", include_entities="false");
-
-
-as.character(as.numeric(result$id_str[nrow(result)]) - 1)
-str_detect(result$created_at[nrow(result)], "2013$")
-
-
-result <- twitter_api_call(url, query, params)
-result <- fromJSON(correctJSON(result))
+api_url <- "https://api.twitter.com/1.1/statuses/user_timeline.json";
+user <- "peteraltmaier"
+max_count <- "200"
+max_id <- "999999999999999999"
+loop <- 1
+keep <- c("created_at", "id_str", "text", "retweet_count")
+rm(tweets_full, tweets_temp)
+repeat {
+ query <- c(include_rts=1, exclude_replies="true", trim_user="true", include_entities="false",
+ screen_name=user,
+ count=max_count,
+ max_id=max_id);
+ if(exists("tweets_full")) {
+ current <- twitter_api_call(api_url, query, api_params)
+ tweets_temp <- fromJSON(correctJSON(current))
+ tweets_temp <- tweets_temp[keep]
+ tweets_full <- insertRow(tweets_full, tweets_temp)
+ }
+ else {
+ current <- twitter_api_call(api_url, query, api_params)
+ tweets_full <- fromJSON(correctJSON(current))
+ tweets_full <- tweets_full[keep]
+ }
+
+ status <- str_detect(tweets_full$created_at[nrow(tweets_full)], "2013$")
+ if (status) {
+ rm(tweets_temp)
+ for(r in 1:nrow(tweets_full)) {
+ status <- str_detect(tweets_full$created_at[r], "2013$")
+ if(is.na(status)) { status <- FALSE }
+ if(status) {
+ tweets_full <- tweets_full[-r,]
+ }
+ }
+ break
+ }
+ else {
+ max_id <- as.character(as.numeric(tweets_full$id_str[nrow(tweets_full)]) - 1)
+ loop <- loop + 1
+ }
+}
# ---------------
diff --git a/functions.R b/functions.R
index 62bdf5c..d74819d 100644
--- a/functions.R
+++ b/functions.R
@@ -3,7 +3,17 @@ require(stringr)
# Replace characters messing up JSON validation (\,\n,^)
correctJSON <- function(string) {
string <- str_replace_all(string, pattern = perl('\\\\(?![tn"])'), replacement = " ")
- string <- str_replace_all(string, pattern = fixed("\n"), replacement = " ")
- string <- str_replace_all(string, pattern = fixed("^"), replacement = " ")
+ string <- str_replace_all(string, pattern = "\n", replacement = " ")
+ string <- str_replace_all(string, pattern = "\r", replacement = " ")
+ string <- str_replace_all(string, pattern = "^", replacement = " ")
+ \xed\xa0\xbd\xed\xb1\x8d\xed\xa0\xbd\xed\xb8\x8e\
return(string)
+}
+
+insertRow <- function(existingDF, newrow, r) {
+ r <- as.numeric(nrow(existingDF)) + 1
+ existingDF <- rbind(existingDF,newrow)
+ existingDF <- existingDF[order(c(1:(nrow(existingDF)-1),r-0.5)),]
+ row.names(existingDF) <- 1:nrow(existingDF)
+ return(existingDF)
}
\ No newline at end of file
diff --git a/temp.txt b/temp.txt
new file mode 100644
index 0000000..1e68dcc
--- /dev/null
+++ b/temp.txt
@@ -0,0 +1,3 @@
+[{"created_at":"Thu Apr 10 20:44:38 +0000 2014","id":454359322768990208,"id_str":"454359322768990208","text":"RT @maybritillner: .@peteraltmaier: Ich war in der schwarz-grünen Pizza-Connection vor vielen Jahren. Und ich habe auch immer alles aufgege…","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Thu Apr 10 20:42:18 +0000 2014","id":454358735167963136,"id_str":"454358735167963136","text":".@peteraltmaier: Ich war in der schwarz-grünen Pizza-Connection vor vielen Jahren. Und ich habe auch immer alles aufgegessen. #Grüne #CDU","source":"Twitter Web Client","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1619798160,"id_str":"1619798160"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":14,"favorite_count":12,"favorited":false,"retweeted":false,"lang":"de"},"retweet_count":14,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Thu Apr 10 20:30:01 +0000 2014","id":454355644989325314,"id_str":"454355644989325314","text":"RT @MKreutzfeldt: Fast wie früher: @peteraltmaier redet bei #Illner mal wieder über Energiepolitik. Neu ist aber: Er lobt den Wirtschaftsmi…","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Thu Apr 10 20:19:44 +0000 2014","id":454353055367307264,"id_str":"454353055367307264","text":"Fast wie früher: @peteraltmaier redet bei #Illner mal wieder über Energiepolitik. Neu ist aber: Er lobt den Wirtschaftsminister.","source":"Twitter Web Client","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":581978005,"id_str":"581978005"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":2,"favorite_count":10,"favorited":false,"retweeted":false,"lang":"de"},"retweet_count":2,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Wed Apr 09 08:10:58 +0000 2014","id":453807268631707648,"id_str":"453807268631707648","text":"RT @JunckerEU: Looking for a new office... with the help of your vote in May! @EU_Commission #withJuncker #EP2014 http://t.co/JAO3sZ9JeI","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Wed Apr 09 07:56:49 +0000 2014","id":453803704718995456,"id_str":"453803704718995456","text":"Looking for a new office... with the help of your vote in May! @EU_Commission #withJuncker #EP2014 http://t.co/JAO3sZ9JeI","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":169426475,"id_str":"169426475"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":66,"favorite_count":31,"extended_entities":{"media":[{"id":453803704593158144,"id_str":"453803704593158144","indices":[99,121],"media_url":"http://pbs.twimg.com/media/Bkw8EKIIEAAcip3.jpg","media_url_https":"https://pbs.twimg.com/media/Bkw8EKIIEAAcip3.jpg","url":"http://t.co/JAO3sZ9JeI","display_url":"pic.twitter.com/JAO3sZ9JeI","expanded_url":"http://twitter.com/JunckerEU/status/453803704718995456/photo/1","type":"photo","sizes":{"medium":{"w":528,"h":298,"resize":"fit"},"large":{"w":528,"h":298,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":340,"h":191,"resize":"fit"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},"retweet_count":66,"favorite_count":0,"extended_entities":{"media":[{"id":453803704593158144,"id_str":"453803704593158144","indices":[114,136],"media_url":"http://pbs.twimg.com/media/Bkw8EKIIEAAcip3.jpg","media_url_https":"https://pbs.twimg.com/media/Bkw8EKIIEAAcip3.jpg","url":"http://t.co/JAO3sZ9JeI","display_url":"pic.twitter.com/JAO3sZ9JeI","expanded_url":"http://twitter.com/JunckerEU/status/453803704718995456/photo/1","type":"photo","sizes":{"medium":{"w":528,"h":298,"resize":"fit"},"large":{"w":528,"h":298,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":340,"h":191,"resize":"fit"}},"source_status_id":453803704718995456,"source_status_id_str":"453803704718995456"}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},{"created_at":"Sat Apr 05 10:08:10 +0000 2014","id":452387211317878784,"id_str":"452387211317878784","text":"RT @MGrosseBroemer: Unser deutscher Spitzenkandidat für Europa: @davidmcallister http://t.co/aGqHski9WI","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Sat Apr 05 10:07:29 +0000 2014","id":452387039691145216,"id_str":"452387039691145216","text":"Unser deutscher Spitzenkandidat für Europa: @davidmcallister http://t.co/aGqHski9WI","source":"Twitter for BlackBerry®","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":574424501,"id_str":"574424501"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":4,"favorite_count":9,"extended_entities":{"media":[{"id":452387039514984448,"id_str":"452387039514984448","indices":[61,83],"media_url":"http://pbs.twimg.com/media/BkcznZdIAAANz63.jpg","media_url_https":"https://pbs.twimg.com/media/BkcznZdIAAANz63.jpg","url":"http://t.co/aGqHski9WI","display_url":"pic.twitter.com/aGqHski9WI","expanded_url":"http://twitter.com/MGrosseBroemer/status/452387039691145216/photo/1","type":"photo","sizes":{"large":{"w":640,"h":480,"resize":"fit"},"small":{"w":340,"h":255,"resize":"fit"},"medium":{"w":600,"h":450,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},"retweet_count":4,"favorite_count":0,"extended_entities":{"media":[{"id":452387039514984448,"id_str":"452387039514984448","indices":[81,103],"media_url":"http://pbs.twimg.com/media/BkcznZdIAAANz63.jpg","media_url_https":"https://pbs.twimg.com/media/BkcznZdIAAANz63.jpg","url":"http://t.co/aGqHski9WI","display_url":"pic.twitter.com/aGqHski9WI","expanded_url":"http://twitter.com/MGrosseBroemer/status/452387039691145216/photo/1","type":"photo","sizes":{"large":{"w":640,"h":480,"resize":"fit"},"small":{"w":340,"h":255,"resize":"fit"},"medium":{"w":600,"h":450,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"}},"source_status_id":452387039691145216,"source_status_id_str":"452387039691145216"}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"created_at":"Sat Apr 05 09:38:59 +0000 2014","id":452379866567299072,"id_str":"452379866567299072","text":"Von Goethe bis Luke Skywalker: @petertauber rockt den #cdupt14 mit Witz, Tiefgang und Sympathie!","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":29,"favorite_count":44,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Tue Apr 01 20:11:38 +0000 2014","id":451089524417134593,"id_str":"451089524417134593","text":"Heute sehr gutes Gespräch von Kanzlerin und Vizekanzler mit den ländern zur EEG-Reform: So macht #GroKo Spass!","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":10,"favorite_count":22,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sun Mar 30 10:56:07 +0000 2014","id":450224949794721792,"id_str":"450224949794721792","text":"RT @citoyenberlin: Ideale Fehlbesetzung? Was macht @peteraltmaier im neuen Amt? http://t.co/4q5Lkw0HjV via @welt","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Sun Mar 30 09:37:09 +0000 2014","id":450205079237591040,"id_str":"450205079237591040","text":"Ideale Fehlbesetzung? Was macht @peteraltmaier im neuen Amt? http://t.co/4q5Lkw0HjV via @welt","source":"Twitter for Android","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":280928169,"id_str":"280928169"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":10,"favorite_count":10,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},"retweet_count":10,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"created_at":"Sun Mar 30 10:06:37 +0000 2014","id":450212494146297856,"id_str":"450212494146297856","text":"RT @robinalexander_: Warum @peteraltmaier auf Twitter schweigt http://t.co/fpbAL3hFY3","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Sun Mar 30 10:06:01 +0000 2014","id":450212341951774720,"id_str":"450212341951774720","text":"Warum @peteraltmaier auf Twitter schweigt http://t.co/fpbAL3hFY3","source":"Twitter for iPad","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":464694427,"id_str":"464694427"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":23,"favorite_count":19,"extended_entities":{"media":[{"id":450212341834342400,"id_str":"450212341834342400","indices":[42,64],"media_url":"http://pbs.twimg.com/media/Bj95vVSIYAABlXB.jpg","media_url_https":"https://pbs.twimg.com/media/Bj95vVSIYAABlXB.jpg","url":"http://t.co/fpbAL3hFY3","display_url":"pic.twitter.com/fpbAL3hFY3","expanded_url":"http://twitter.com/robinalexander_/status/450212341951774720/photo/1","type":"photo","sizes":{"medium":{"w":600,"h":447,"resize":"fit"},"large":{"w":1024,"h":764,"resize":"fit"},"small":{"w":340,"h":253,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},"retweet_count":23,"favorite_count":0,"extended_entities":{"media":[{"id":450212341834342400,"id_str":"450212341834342400","indices":[63,85],"media_url":"http://pbs.twimg.com/media/Bj95vVSIYAABlXB.jpg","media_url_https":"https://pbs.twimg.com/media/Bj95vVSIYAABlXB.jpg","url":"http://t.co/fpbAL3hFY3","display_url":"pic.twitter.com/fpbAL3hFY3","expanded_url":"http://twitter.com/robinalexander_/status/450212341951774720/photo/1","type":"photo","sizes":{"medium":{"w":600,"h":447,"resize":"fit"},"large":{"w":1024,"h":764,"resize":"fit"},"small":{"w":340,"h":253,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"}},"source_status_id":450212341951774720,"source_status_id_str":"450212341951774720"}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"created_at":"Sat Mar 08 10:22:56 +0000 2014","id":442244065015644160,"id_str":"442244065015644160","text":"RT @tobiashans: Wahlkampfauftakt der CDU Merchweiler mit Bürgermeisterkandidat Michael Marx, @peteraltmaier und @rolandtheis http://t.co/KV…","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Sat Mar 08 10:22:18 +0000 2014","id":442243907876032512,"id_str":"442243907876032512","text":"Wahlkampfauftakt der CDU Merchweiler mit Bürgermeisterkandidat Michael Marx, @peteraltmaier und @rolandtheis http://t.co/KVXLks81Ms","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":19751955,"id_str":"19751955"},"geo":{"type":"Point","coordinates":[49.37373742,7.08210795]},"coordinates":{"type":"Point","coordinates":[7.08210795,49.37373742]},"place":{"id":"cfe570f1424d739d","url":"https://api.twitter.com/1.1/geo/id/cfe570f1424d739d.json","place_type":"city","name":"Merchweiler","full_name":"Merchweiler, Neunkirchen","country_code":"DE","country":"Deutschland","contained_within":[],"bounding_box":{"type":"Polygon","coordinates":[[[7.023389,49.328395],[7.102476,49.328395],[7.102476,49.380272],[7.023389,49.380272]]]},"attributes":{}},"contributors":null,"retweet_count":3,"favorite_count":5,"extended_entities":{"media":[{"id":442243907695697921,"id_str":"442243907695697921","indices":[109,131],"media_url":"http://pbs.twimg.com/media/BiMqfa5IYAEeJAb.jpg","media_url_https":"https://pbs.twimg.com/media/BiMqfa5IYAEeJAb.jpg","url":"http://t.co/KVXLks81Ms","display_url":"pic.twitter.com/KVXLks81Ms","expanded_url":"http://twitter.com/tobiashans/status/442243907876032512/photo/1","type":"photo","sizes":{"small":{"w":340,"h":255,"resize":"fit"},"medium":{"w":600,"h":450,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1024,"h":768,"resize":"fit"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},"retweet_count":3,"favorite_count":0,"extended_entities":{"media":[{"id":442243907695697921,"id_str":"442243907695697921","indices":[139,140],"media_url":"http://pbs.twimg.com/media/BiMqfa5IYAEeJAb.jpg","media_url_https":"https://pbs.twimg.com/media/BiMqfa5IYAEeJAb.jpg","url":"http://t.co/KVXLks81Ms","display_url":"pic.twitter.com/KVXLks81Ms","expanded_url":"http://twitter.com/tobiashans/status/442243907876032512/photo/1","type":"photo","sizes":{"small":{"w":340,"h":255,"resize":"fit"},"medium":{"w":600,"h":450,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1024,"h":768,"resize":"fit"}},"source_status_id":442243907876032512,"source_status_id_str":"442243907876032512"}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"created_at":"Wed Mar 05 15:41:01 +0000 2014","id":441236949874257920,"id_str":"441236949874257920","text":"RT @cdu_saar: In 90 min. beginnt unser 43. Aschermittwochtreffen in Schwalbach mit @_A_K_K_, @peteraltmaier und vielen weiteren Freunden. W…","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Wed Mar 05 15:30:32 +0000 2014","id":441234313342771201,"id_str":"441234313342771201","text":"In 90 min. beginnt unser 43. Aschermittwochtreffen in Schwalbach mit @_A_K_K_, @peteraltmaier und vielen weiteren Freunden. Wir freuen uns!","source":"Twitter Web Client","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":26521316,"id_str":"26521316"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":4,"favorite_count":3,"favorited":false,"retweeted":false,"lang":"de"},"retweet_count":4,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Fri Feb 21 20:16:44 +0000 2014","id":436957681224798208,"id_str":"436957681224798208","text":"RT @GeorgMaringer: Heute Abend mit @peteraltmaier auf der 2. Kappensitzung des KV \"Die Bollen\" in Huelzweiler.","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Fri Feb 21 16:45:00 +0000 2014","id":436904398183489536,"id_str":"436904398183489536","text":"Heute Abend mit @peteraltmaier auf der 2. Kappensitzung des KV \"Die Bollen\" in Huelzweiler.","source":"Twitter for BlackBerry®","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":107688093,"id_str":"107688093"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":3,"favorite_count":4,"favorited":false,"retweeted":false,"lang":"de"},"retweet_count":3,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Tue Feb 18 22:09:17 +0000 2014","id":435898841498267648,"id_str":"435898841498267648","text":"Mitten in Europa. Unfassbar. #euromaidan","source":"Twitter Web Client","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":64,"favorite_count":59,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Mon Feb 17 20:30:33 +0000 2014","id":435511608320995329,"id_str":"435511608320995329","text":"RT @Elektronews: @peteraltmaier Zum Glück ist der Fluch des Grünkohlkönigs an Dir vorbeigegangen:
+http://t.co/uNHVaUhE3o","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Mon Feb 17 20:26:11 +0000 2014","id":435510508548935680,"id_str":"435510508548935680","text":"@peteraltmaier Zum Glück ist der Fluch des Grünkohlkönigs an Dir vorbeigegangen:
+http://t.co/uNHVaUhE3o","source":"Twitter Web Client","truncated":false,"in_reply_to_status_id":435509820607983616,"in_reply_to_status_id_str":"435509820607983616","in_reply_to_user_id":378693834,"in_reply_to_user_id_str":"378693834","in_reply_to_screen_name":"peteraltmaier","user":{"id":37979623,"id_str":"37979623"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":4,"favorite_count":2,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},"retweet_count":4,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"created_at":"Mon Feb 17 20:23:27 +0000 2014","id":435509820607983616,"id_str":"435509820607983616","text":"Heute Abend muss ich meinen Titel als Grünkohlkönig von Oldenburg leider abgeben. Erbmonarchie ist irgendwie besser! ...","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":28,"favorite_count":57,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Mon Feb 17 12:59:22 +0000 2014","id":435398062400634880,"id_str":"435398062400634880","text":"RT @SPIEGEL_Top: Edathy-Affäre: Merkel spricht Gabriel volles Vertrauen aus http://t.co/YiFraw1ItK","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Mon Feb 17 12:37:14 +0000 2014","id":435392493698293760,"id_str":"435392493698293760","text":"Edathy-Affäre: Merkel spricht Gabriel volles Vertrauen aus http://t.co/YiFraw1ItK","source":"dlvr.it","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":17875811,"id_str":"17875811"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":23,"favorite_count":10,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},"retweet_count":23,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"created_at":"Fri Feb 07 18:37:12 +0000 2014","id":431859204601942016,"id_str":"431859204601942016","text":"RT @petertauber: Wir haben eben David McAllister offiziell als Spitzenkandidaten für die Europawahl nominiert. Hurra!","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Fri Feb 07 18:29:29 +0000 2014","id":431857264161742848,"id_str":"431857264161742848","text":"Wir haben eben David McAllister offiziell als Spitzenkandidaten für die Europawahl nominiert. Hurra!","source":"Echofon","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":22260144,"id_str":"22260144"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":28,"favorite_count":32,"favorited":false,"retweeted":false,"lang":"de"},"retweet_count":28,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Fri Feb 07 18:35:02 +0000 2014","id":431858659656990721,"id_str":"431858659656990721","text":"RT @FHubersr: @peteraltmaier //die Schwarz-Grünen werden zeigen, daß sich Ökologie und Ökonomie vertragen und kein Widerspruch sind.Mutig v…","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Fri Feb 07 18:32:30 +0000 2014","id":431858022366064640,"id_str":"431858022366064640","text":"@peteraltmaier //die Schwarz-Grünen werden zeigen, daß sich Ökologie und Ökonomie vertragen und kein Widerspruch sind.Mutig von bd. Seiten","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":431845492579123201,"in_reply_to_status_id_str":"431845492579123201","in_reply_to_user_id":378693834,"in_reply_to_user_id_str":"378693834","in_reply_to_screen_name":"peteraltmaier","user":{"id":2172292811,"id_str":"2172292811"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":3,"favorite_count":4,"favorited":false,"retweeted":false,"lang":"de"},"retweet_count":3,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Fri Feb 07 17:47:28 +0000 2014","id":431846689285345281,"id_str":"431846689285345281","text":"3) Europawahl erstmals mit Spitzenkandidaten 4) Überwindung der Euro-Krise durch echte Reformen 5) Weltweit angemessene Konsequenzen aus NSA","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":5,"favorite_count":6,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Fri Feb 07 17:42:43 +0000 2014","id":431845492579123201,"id_str":"431845492579123201","text":"Dinge, die das Land verändern: 1) Keine neuen Schulden ab 2015 2) Schwarz-Grün in Hessen mit gegenseitigem Respekt auf Augenhöhe 1/3","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":9,"favorite_count":8,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sun Feb 02 22:06:57 +0000 2014","id":430100048844967936,"id_str":"430100048844967936","text":"Twitter ist heute die schärfste Waffe der Demokratie: Wir haben es nur noch nicht bemerkt!","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":115,"favorite_count":133,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sun Feb 02 20:21:07 +0000 2014","id":430073414255390720,"id_str":"430073414255390720","text":"RT @Andyhesse: Mir ist der @peteraltmaier als #MisterGermany lieber als daß sich ausgerechnet die #SPD ums Internet kümmert.","source":"Twitter Web Client","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Sun Feb 02 20:19:04 +0000 2014","id":430072901015179265,"id_str":"430072901015179265","text":"Mir ist der @peteraltmaier als #MisterGermany lieber als daß sich ausgerechnet die #SPD ums Internet kümmert.","source":"Twitter for Android","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":22011609,"id_str":"22011609"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":6,"favorite_count":12,"favorited":false,"retweeted":false,"lang":"de"},"retweet_count":6,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sun Feb 02 20:05:58 +0000 2014","id":430069604749029376,"id_str":"430069604749029376","text":"RT @petertauber: Dieses Twitter haben die doch extra für den @peteraltmaier erfunden. Der hat immer die besten Klöpse raus.","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Sun Feb 02 19:48:31 +0000 2014","id":430065213531246592,"id_str":"430065213531246592","text":"Dieses Twitter haben die doch extra für den @peteraltmaier erfunden. Der hat immer die besten Klöpse raus.","source":"Echofon","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":22260144,"id_str":"22260144"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":13,"favorite_count":40,"favorited":false,"retweeted":false,"lang":"de"},"retweet_count":13,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sun Feb 02 12:49:11 +0000 2014","id":429959683609493504,"id_str":"429959683609493504","text":"Ich arbeite gerne für den Erfolg der #GroKo, aber ich werde eher Mister Germany, als dass die SPD die neue Netzpartei wird! :-)","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":217,"favorite_count":190,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Wed Jan 29 10:40:56 +0000 2014","id":428477857082654721,"id_str":"428477857082654721","text":"\"Der Mensch im Mittelpunkt\" ein gutes Leitmotiv für die Arbeit der #Groko das kann man für jedes Ministerium in konkrete Arbeit umsetzen. !","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":7,"favorite_count":5,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sat Jan 25 09:34:11 +0000 2014","id":427011508879753216,"id_str":"427011508879753216","text":"Sitze zusammen mit @A_K_K_ @tobiashans und @rolandtheis und widerstehen gemeinsam dem Anreiz der Brötchenplatte ... vielleicht..","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":10,"favorite_count":32,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Thu Jan 23 21:11:35 +0000 2014","id":426462238208049152,"id_str":"426462238208049152","text":"Nach der Klausurtagung von Meseberg: Die #GroKo kann zu einer richtig gut funktionieren Koalition der Sachlichkeit werden.","source":"Twitter Web Client","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":8,"favorite_count":16,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Thu Jan 23 08:34:16 +0000 2014","id":426271654512427009,"id_str":"426271654512427009","text":"RT @DerAltvordere: Politisch nix gebacken kriegen und dann auch noch nachts den Schlossgarten umgraben. RT @peteraltmaier: Mach mich jetzt …","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Thu Jan 23 08:33:01 +0000 2014","id":426271338408722432,"id_str":"426271338408722432","text":"Politisch nix gebacken kriegen und dann auch noch nachts den Schlossgarten umgraben. RT @peteraltmaier: Mach mich jetzt vom Acker.","source":"Twitter for Android","truncated":false,"in_reply_to_status_id":426152296977010689,"in_reply_to_status_id_str":"426152296977010689","in_reply_to_user_id":378693834,"in_reply_to_user_id_str":"378693834","in_reply_to_screen_name":"peteraltmaier","user":{"id":17164879,"id_str":"17164879"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":5,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},"retweet_count":5,"favorite_count":0,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Thu Jan 23 00:39:59 +0000 2014","id":426152296977010689,"id_str":"426152296977010689","text":"Mach mich jetzt vom Acker.","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":6,"favorite_count":14,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Wed Jan 22 10:14:00 +0000 2014","id":425934362375634944,"id_str":"425934362375634944","text":"RT @thodenk: Der @peteraltmaier begrüßt sogar die Journalisten mit Handschlag vor Schloss #Meseberg #groko http://t.co/4k34bgyXGm","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Wed Jan 22 09:46:42 +0000 2014","id":425927495159123968,"id_str":"425927495159123968","text":"Der @peteraltmaier begrüßt sogar die Journalisten mit Handschlag vor Schloss #Meseberg #groko http://t.co/4k34bgyXGm","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":23776521,"id_str":"23776521"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":5,"favorite_count":10,"extended_entities":{"media":[{"id":425927495041712128,"id_str":"425927495041712128","indices":[94,116],"media_url":"http://pbs.twimg.com/media/BekyzNIIgAAt-w3.jpg","media_url_https":"https://pbs.twimg.com/media/BekyzNIIgAAt-w3.jpg","url":"http://t.co/4k34bgyXGm","display_url":"pic.twitter.com/4k34bgyXGm","expanded_url":"http://twitter.com/thodenk/status/425927495159123968/photo/1","type":"photo","sizes":{"small":{"w":340,"h":255,"resize":"fit"},"medium":{"w":600,"h":450,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1024,"h":768,"resize":"fit"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},"retweet_count":5,"favorite_count":0,"extended_entities":{"media":[{"id":425927495041712128,"id_str":"425927495041712128","indices":[107,129],"media_url":"http://pbs.twimg.com/media/BekyzNIIgAAt-w3.jpg","media_url_https":"https://pbs.twimg.com/media/BekyzNIIgAAt-w3.jpg","url":"http://t.co/4k34bgyXGm","display_url":"pic.twitter.com/4k34bgyXGm","expanded_url":"http://twitter.com/thodenk/status/425927495159123968/photo/1","type":"photo","sizes":{"small":{"w":340,"h":255,"resize":"fit"},"medium":{"w":600,"h":450,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1024,"h":768,"resize":"fit"}},"source_status_id":425927495159123968,"source_status_id_str":"425927495159123968"}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"created_at":"Sun Jan 19 19:27:32 +0000 2014","id":424986500322033665,"id_str":"424986500322033665","text":"RT @UdoSieverding: Wow! Für #berlindirekt hat @peteraltmaier sogar @sigmargabriel seine @heuteshow Krawatte geliehen ;-) #Energiewende http…","source":"Mobile Web (M5)","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Sun Jan 19 19:00:15 +0000 2014","id":424979635818856448,"id_str":"424979635818856448","text":"Wow! Für #berlindirekt hat @peteraltmaier sogar @sigmargabriel seine @heuteshow Krawatte geliehen ;-) #Energiewende http://t.co/2AfvN2dUok","source":"Twitter Web Client","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":43671680,"id_str":"43671680"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":28,"favorite_count":46,"extended_entities":{"media":[{"id":424979635827245056,"id_str":"424979635827245056","indices":[116,138],"media_url":"http://pbs.twimg.com/media/BeXUuiZCAAAMWCx.jpg","media_url_https":"https://pbs.twimg.com/media/BeXUuiZCAAAMWCx.jpg","url":"http://t.co/2AfvN2dUok","display_url":"pic.twitter.com/2AfvN2dUok","expanded_url":"http://twitter.com/UdoSieverding/status/424979635818856448/photo/1","type":"photo","sizes":{"medium":{"w":600,"h":214,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1024,"h":366,"resize":"fit"},"small":{"w":340,"h":121,"resize":"fit"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},"retweet_count":28,"favorite_count":0,"extended_entities":{"media":[{"id":424979635827245056,"id_str":"424979635827245056","indices":[139,140],"media_url":"http://pbs.twimg.com/media/BeXUuiZCAAAMWCx.jpg","media_url_https":"https://pbs.twimg.com/media/BeXUuiZCAAAMWCx.jpg","url":"http://t.co/2AfvN2dUok","display_url":"pic.twitter.com/2AfvN2dUok","expanded_url":"http://twitter.com/UdoSieverding/status/424979635818856448/photo/1","type":"photo","sizes":{"medium":{"w":600,"h":214,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1024,"h":366,"resize":"fit"},"small":{"w":340,"h":121,"resize":"fit"}},"source_status_id":424979635818856448,"source_status_id_str":"424979635818856448"}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"created_at":"Sat Jan 18 20:02:56 +0000 2014","id":424633020663226368,"id_str":"424633020663226368","text":"Mach mich jetzt vom Acker! Je mehr ich nachdenke, bin ich überzeugt: das Internet ist weder krank noch kaputt. Das Beste kommt noch!","source":"Twitter for iPad","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":43,"favorite_count":65,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sat Jan 18 18:20:28 +0000 2014","id":424607234036097025,"id_str":"424607234036097025","text":"Warum sind die Piraten so still? Vielleicht, weil sie Kinder des Internets sind, die ihren Elter nicht verstehen!","source":"Twitter for iPad","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":16,"favorite_count":14,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sun Jan 12 21:17:46 +0000 2014","id":422477528263950336,"id_str":"422477528263950336","text":"Das Internet ist nicht kaputt @saschalobo Aber es braucht Schutz - wie Briefe, Telegraphie, Telephonie seit jeher.","source":"Twitter Web Client","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":18,"favorite_count":33,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sat Jan 11 21:50:51 +0000 2014","id":422123463453982720,"id_str":"422123463453982720","text":"Das Neue Jahr ist doch gar nicht so schlecht: wir müssen halt nur was draus machen! :-)","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":33,"favorite_count":59,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Tue Dec 31 20:06:34 +0000 2013","id":418110954493464576,"id_str":"418110954493464576","text":"Meine Follower sind alle \"golden\"!!! Danke und Happy New Year, auf ein gutes Twitteinander in 2014!","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":17,"favorite_count":77,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Mon Dec 23 12:13:28 +0000 2013","id":415092792436985856,"id_str":"415092792436985856","text":"Ach ja, übrigens: Freue mich, dass meine Follower mir auch im neuen Amt die Treue halten! Frohe Weihnachten & guten Rutsch!","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":18,"favorite_count":74,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Mon Dec 23 11:57:06 +0000 2013","id":415088674888351744,"id_str":"415088674888351744","text":"Danke an alle,die meine Umwelt- u Energiepolitik auf Twitter begleitet, kommentiert, kritisiert haben: Hat mir viel gegeben u Freude gemacht","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":14,"favorite_count":71,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Fri Dec 20 22:46:08 +0000 2013","id":414164846222254081,"id_str":"414164846222254081","text":"Welcome Mr Chodorowski!","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":31,"favorite_count":53,"favorited":false,"retweeted":false,"lang":"pl"},{"created_at":"Thu Dec 19 09:03:14 +0000 2013","id":413595366697996288,"id_str":"413595366697996288","text":"RT @BILD: Merkel ist #Facebook-Queen, @peteraltmaier der Twitter-König. Wie digital ist die #GroKo? http://t.co/NjxtdlG3U6","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Thu Dec 19 08:54:30 +0000 2013","id":413593170383867904,"id_str":"413593170383867904","text":"Merkel ist #Facebook-Queen, @peteraltmaier der Twitter-König. Wie digital ist die #GroKo? http://t.co/NjxtdlG3U6","source":"TweetDeck","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":9204502,"id_str":"9204502"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":10,"favorite_count":10,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},"retweet_count":10,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"created_at":"Sun Dec 15 19:04:03 +0000 2013","id":412297015272701953,"id_str":"412297015272701953","text":"Soviel Netzkompetenz war nie: Mit @petertauber als Generalsekretär u @DoroBaer als Staatssekretär bekommt die digitale Zukunft eine Heimat!","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":43,"favorite_count":65,"favorited":false,"retweeted":false,"lang":"de"},{"created_at":"Sun Dec 15 19:01:10 +0000 2013","id":412296292958994432,"id_str":"412296292958994432","text":"Freue mich sehr über die neue Aufgabe als Kanzleramtsminister: Danke für die Glückwünsche! Wir krempeln jetzt die Ärmel hoch und legen los!","source":"Twitter for iPhone","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":378693834,"id_str":"378693834"},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":36,"favorite_count":100,"favorited":false,"retweeted":false,"lang":"de"}]