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"}]