From 583690a4456c1a2f995acf5c6db9d9c721bbd8bb Mon Sep 17 00:00:00 2001 From: kirbylife <kirbylife@protonmail.com> Date: Tue, 8 Aug 2023 00:07:41 -0600 Subject: [PATCH] Add support to videos --- Cargo.toml | 3 +- juunil-crawler/Cargo.toml | 12 + juunil-crawler/src/main.rs | 154 + juunil-crawler/test.html | 4237 +++++++++++++++++ juunil-crawler/test2.html | 2622 ++++++++++ juunil-server/Cargo.toml | 12 + juunil-server/src/main.rs | 27 + .../2023-08-07-063249_create_posts/down.sql | 1 + .../2023-08-07-063249_create_posts/up.sql | 7 + src/controllers.rs | 171 + src/models.rs | 72 + src/schema.rs | 10 + 12 files changed, 7327 insertions(+), 1 deletion(-) create mode 100644 juunil-crawler/Cargo.toml create mode 100644 juunil-crawler/src/main.rs create mode 100644 juunil-crawler/test.html create mode 100644 juunil-crawler/test2.html create mode 100644 juunil-server/Cargo.toml create mode 100644 juunil-server/src/main.rs create mode 100644 src/controllers.rs create mode 100644 src/models.rs diff --git a/Cargo.toml b/Cargo.toml index 137bd75..167f53d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,4 +10,5 @@ chrono = { version = "0.4.26", features = ["serde"] } diesel = { version = "2.1.0", features = ["sqlite", "chrono", "serde_json"] } dotenv = "0.15.0" serde = "1.0.164" -serde_json = "1.0.99" \ No newline at end of file +serde_derive = "1.0.183" +serde_json = "1.0.99" diff --git a/juunil-crawler/Cargo.toml b/juunil-crawler/Cargo.toml new file mode 100644 index 0000000..ee0dd17 --- /dev/null +++ b/juunil-crawler/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "juunil-crawler" +version = "0.1.0" +edition = "2021" + +[dependencies] +raspa = { git = "https://git.kirbylife.dev/kirbylife/raspa" } +juunil = { path = "../" } +chrono = { version = "0.4.26", features = ["serde"] } +dotenv = "0.15.0" +serde = "1.0.183" +serde_json = "1.0.104" diff --git a/juunil-crawler/src/main.rs b/juunil-crawler/src/main.rs new file mode 100644 index 0000000..d3c1642 --- /dev/null +++ b/juunil-crawler/src/main.rs @@ -0,0 +1,154 @@ +use chrono::{NaiveDate, NaiveDateTime}; +use dotenv::dotenv; +use juunil::controllers::{images, posts, videos}; +use raspa::request::{Request, RequestBase}; +use raspa::selector::{Selector, SelectorBase}; +use serde_json::Value; + +const URL_BASE: &str = "https://syndication.twitter.com/srv/timeline-profile/screen-name/"; +const DATE_FMT: &str = "%a %b %d %H:%M:%S %z %Y"; + +#[derive(Debug)] +struct PostInfo { + id: i64, + description: String, + images: Vec<String>, + videos: Vec<String>, + datetime: NaiveDateTime, +} + +fn build_timestamp_from_str(raw_date: String) -> NaiveDateTime { + NaiveDateTime::parse_from_str(&raw_date, DATE_FMT).unwrap() +} + +fn get_post_info(content: Value) -> PostInfo { + let id = content["conversation_id_str"] + .as_str() + .unwrap() + .parse::<i64>() + .unwrap(); + + let mut description = content["full_text"].as_str().unwrap().to_string(); + let datetime = build_timestamp_from_str(content["created_at"].as_str().unwrap().to_string()); + let mut images: Vec<String> = vec![]; + let mut videos: Vec<String> = vec![]; + + let media_items = if content["extended_entities"]["media"].is_array() { + content["extended_entities"]["media"].as_array().unwrap() + } else { + content["entities"]["media"].as_array().unwrap() + }; + + for media in media_items { + let min_url = media["url"].as_str().unwrap(); + description = description.replace(min_url, ""); + + let media_type = media["type"].as_str().unwrap(); + + match media_type { + "photo" => images.push(media["media_url_https"].as_str().unwrap().to_string()), + "video" => { + let mut bitrate = 0; + let mut index = 0; + for (i, variant) in media["video_info"]["variants"] + .as_array() + .unwrap() + .iter() + .enumerate() + { + if variant["bitrate"].is_number() { + let temp_bitrate = variant["bitrate"].as_u64().unwrap(); + if temp_bitrate > bitrate { + bitrate = temp_bitrate; + index = i; + } + } + } + videos.push( + media["video_info"]["variants"][index]["url"] + .as_str() + .unwrap() + .to_string(), + ); + } + _ => {} + }; + } + description = description.trim().to_string(); + + for url in content["entities"]["urls"].as_array().unwrap() { + let min_url = url["url"].as_str().unwrap(); + let max_url = url["expanded_url"].as_str().unwrap(); + description = description.replace(min_url, max_url); + } + + PostInfo { + id, + description, + images, + videos, + datetime, + } +} + +fn get_posts() -> Vec<PostInfo> { + let tw_user: &str = &std::env::var("TW_USER") + .expect("Could not load the environment variable \"TW_USER\", add it to your .env"); + let auth_token: &str = &std::env::var("AUTH_TOKEN") + .expect("Could not load the environment variable \"AUTH_TOKEN\", add it to your .env"); + + let resp = if cfg!(debug_assertions) { + Selector::from_html(include_str!("../test2.html")) + } else { + let req = Request::new(format!("{}{}", URL_BASE, tw_user)).unwrap(); + let res = req.add_cookies(vec![("auth_token", auth_token)]).launch(); + Selector::from_html(res.html()) + }; + + let raw_json = resp + .xpath_once("//script[@id=\"__NEXT_DATA__\"]") + .unwrap() + .html(); + println!("{raw_json}"); + let raw_json: &[u8] = raw_json.as_ref(); + + let data: Value = serde_json::from_slice(&raw_json[51..raw_json.len() - 9]) + .expect("The JSON could'nt be deserialized"); + let tws = data["props"]["pageProps"]["timeline"]["entries"] + .as_array() + .unwrap() + .iter() + // Remove all the RT statuses + .filter(|x| { + !x["content"]["tweet"]["full_text"] + .as_str() + .unwrap() + .starts_with("RT") + }) + // Remove all the reply tweets + .filter(|x| !x["content"]["tweet"]["in_reply_to_status_id_str"].is_string()) + .collect::<Vec<_>>(); + + let mut output = vec![]; + + for tw in tws { + let content = tw["content"]["tweet"].clone(); + let post_info = get_post_info(content); + + output.push(post_info); + } + output +} + +fn main() { + dotenv().ok(); + + let latest_posts = get_posts(); + println!("{latest_posts:#?}"); + + for post in latest_posts { + posts::add_post(post.id, post.description, post.datetime); + images::add_images(post.id, post.images); + videos::add_videos(post.id, post.videos); + } +} diff --git a/juunil-crawler/test.html b/juunil-crawler/test.html new file mode 100644 index 0000000..748d62b --- /dev/null +++ b/juunil-crawler/test.html @@ -0,0 +1,4237 @@ +<!DOCTYPE html> +<html> + <head> + <meta charSet="utf-8" /> + <meta content="width=device-width, initial-scale=1" name="viewport" /> + <meta name="next-head-count" content="2" /> + <noscript data-n-css=""></noscript> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/runtime-2cef2cd3029217be2b2d.js" as="script" /> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/modules.20f98d7498a59035a762.js" as="script" /> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/main-fd9ef5eb169057cda26d.js" as="script" /> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/pages/_app-6ed494f5458c72a92281.js" as="script" /> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/pages/timeline-profile/screen-name/%5BscreenName%5D-c33f0b02841cffc3e9b4.js" as="script" /> + </head> + <body> + <div id="__next"></div> + <script id="__NEXT_DATA__" type="application/json"> + { + "props": { + "pageProps": { + "contextProvider": { + "features": {}, + "scribeData": { + "client_version": null, + "dnt": false, + "widget_id": "embed-0", + "widget_origin": "", + "widget_frame": "", + "widget_partner": "", + "widget_site_screen_name": "", + "widget_site_user_id": "", + "widget_creator_screen_name": "", + "widget_creator_user_id": "", + "widget_iframe_version": "bb06567:1687853948269", + "widget_data_source": "screen-name:trafico_zmg", + "session_id": "" + }, + "messengerContext": { + "embedId": "embed-0" + }, + "hasResults": true, + "lang": "en", + "theme": "light" + }, + "lang": "en", + "maxHeight": null, + "showHeader": true, + "hideBorder": false, + "hideFooter": false, + "hideScrollBar": false, + "transparent": false, + "timeline": { + "entries": [{ + "type": "tweet", + "entry_id": "tweet-1688435279059677185", + "sort_index": "1688457696002441215", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688435279059677185", + "created_at": "Mon Aug 07 06:21:54 +0000 2023", + "display_text_range": [0, 139], + "entities": { + "user_mentions": [{ + "id_str": "418435814", + "name": "夏目きゅさく🇲🇽", + "screen_name": "kysakunatsume", + "indices": [3, 17] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [19, 31] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @kysakunatsume: @Trafico_ZMG todos los semáforos fuera de servicio en Plan de San Luis y Circunvalación entrada a túnel Glorieta Colón.", + "id_str": "1688435279059677185", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688435279059677185", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 1, + "retweeted": false, + "text": "RT @kysakunatsume: @Trafico_ZMG todos los semáforos fuera de servicio en Plan de San Luis y Circunvalación entrada a túnel Glorieta Colón.", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "conversation_id_str": "1688434410754801664", + "created_at": "Mon Aug 07 06:18:27 +0000 2023", + "display_text_range": [0, 120], + "entities": { + "user_mentions": [{ + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [0, 12] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 4, + "favorited": false, + "full_text": "@Trafico_ZMG todos los semáforos fuera de servicio en Plan de San Luis y Circunvalación entrada a túnel Glorieta Colón.", + "id_str": "1688434410754801664", + "in_reply_to_name": "Trafico_ZMG", + "in_reply_to_screen_name": "Trafico_ZMG", + "in_reply_to_user_id_str": "263809798", + "lang": "es", + "permalink": "/kysakunatsume/status/1688434410754801664", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 1, + "retweet_count": 1, + "retweeted": false, + "text": "@Trafico_ZMG todos los semáforos fuera de servicio en Plan de San Luis y Circunvalación entrada a túnel Glorieta Colón.", + "user": { + "blocking": false, + "created_at": "Tue Nov 22 05:15:43 +0000 2011", + "default_profile": true, + "default_profile_image": false, + "description": "", + "entities": { + "description": { + "urls": [] + }, + "url": {} + }, + "fast_followers_count": 0, + "favourites_count": 150366, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 496, + "following": false, + "friends_count": 892, + "has_custom_timelines": false, + "id": 0, + "id_str": "418435814", + "is_translator": false, + "listed_count": 2, + "location": "Mexico", + "media_count": 113, + "name": "夏目きゅさく🇲🇽", + "normal_followers_count": 496, + "notifications": false, + "profile_banner_url": "", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1568345408266461190/OxJJrmEh_normal.jpg", + "protected": false, + "screen_name": "kysakunatsume", + "show_all_inline_media": false, + "statuses_count": 10131, + "time_zone": "", + "translator_type": "none", + "url": "", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": false + } + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688434984577544192", + "sort_index": "1688457696002441214", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688434984577544192", + "created_at": "Mon Aug 07 06:20:44 +0000 2023", + "display_text_range": [0, 140], + "entities": { + "user_mentions": [{ + "id_str": "49519281", + "name": "Carlos", + "screen_name": "solrac_mx", + "indices": [3, 13] + }, { + "id_str": "81437068", + "name": "Gobierno de Guadalajara", + "screen_name": "GuadalajaraGob", + "indices": [15, 30] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [31, 43] + }, { + "id_str": "176280866", + "name": "ZONA 3", + "screen_name": "zona3noticias", + "indices": [44, 58] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @solrac_mx: @GuadalajaraGob @Trafico_ZMG @zona3noticias podrian apoyar a tapar esos baches truena llantas en el cruce de la 22 y Legazpi…", + "id_str": "1688434984577544192", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688434984577544192", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 3, + "retweeted": false, + "text": "RT @solrac_mx: @GuadalajaraGob @Trafico_ZMG @zona3noticias podrian apoyar a tapar esos baches truena llantas en el cruce de la 22 y Legazpi…", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "conversation_id_str": "1688411423808913408", + "created_at": "Mon Aug 07 04:47:07 +0000 2023", + "display_text_range": [0, 219], + "entities": { + "user_mentions": [{ + "id_str": "81437068", + "name": "Gobierno de Guadalajara", + "screen_name": "GuadalajaraGob", + "indices": [0, 15] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [16, 28] + }, { + "id_str": "176280866", + "name": "ZONA 3", + "screen_name": "zona3noticias", + "indices": [29, 43] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/e8rX9UUUfz", + "expanded_url": "https://twitter.com/solrac_mx/status/1688411423808913408/photo/1", + "id_str": "1688411421078396928", + "indices": [220, 243], + "media_url_https": "https://pbs.twimg.com/media/F25xPewXIAAfxvl.jpg", + "type": "photo", + "url": "https://t.co/e8rX9UUUfz", + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 1536, + "w": 2048, + "resize": "fit" + }, + "medium": { + "h": 900, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 510, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 1536, + "width": 2048, + "focus_rects": [{ + "x": 0, + "y": 0, + "w": 2048, + "h": 1147 + }, { + "x": 0, + "y": 0, + "w": 1536, + "h": 1536 + }, { + "x": 0, + "y": 0, + "w": 1347, + "h": 1536 + }, { + "x": 0, + "y": 0, + "w": 768, + "h": 1536 + }, { + "x": 0, + "y": 0, + "w": 2048, + "h": 1536 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/e8rX9UUUfz", + "expanded_url": "https://twitter.com/solrac_mx/status/1688411423808913408/photo/1", + "id_str": "1688411421078396928", + "indices": [220, 243], + "media_key": "3_1688411421078396928", + "media_url_https": "https://pbs.twimg.com/media/F25xPewXIAAfxvl.jpg", + "type": "photo", + "url": "https://t.co/e8rX9UUUfz", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 1536, + "w": 2048, + "resize": "fit" + }, + "medium": { + "h": 900, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 510, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 1536, + "width": 2048, + "focus_rects": [{ + "x": 0, + "y": 0, + "w": 2048, + "h": 1147 + }, { + "x": 0, + "y": 0, + "w": 1536, + "h": 1536 + }, { + "x": 0, + "y": 0, + "w": 1347, + "h": 1536 + }, { + "x": 0, + "y": 0, + "w": 768, + "h": 1536 + }, { + "x": 0, + "y": 0, + "w": 2048, + "h": 1536 + }] + } + }] + }, + "favorite_count": 5, + "favorited": false, + "full_text": "@GuadalajaraGob @Trafico_ZMG @zona3noticias podrian apoyar a tapar esos baches truena llantas en el cruce de la 22 y Legazpi?? Si de paso pueden arreglar ese pedazo de las vías, mi suspension y cartera se los agradecera https://t.co/e8rX9UUUfz", + "id_str": "1688411423808913408", + "in_reply_to_name": "GuadalajaraGob", + "in_reply_to_screen_name": "GuadalajaraGob", + "in_reply_to_user_id_str": "81437068", + "lang": "es", + "permalink": "/solrac_mx/status/1688411423808913408", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 1, + "retweet_count": 3, + "retweeted": false, + "text": "@GuadalajaraGob @Trafico_ZMG @zona3noticias podrian apoyar a tapar esos baches truena llantas en el cruce de la 22 y Legazpi?? Si de paso pueden arreglar ese pedazo de las vías, mi suspension y cartera se los agradecera https://t.co/e8rX9UUUfz", + "user": { + "blocking": false, + "created_at": "Mon Jun 22 03:12:16 +0000 2009", + "default_profile": false, + "default_profile_image": false, + "description": "", + "entities": { + "description": { + "urls": [] + }, + "url": {} + }, + "fast_followers_count": 0, + "favourites_count": 468, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 109, + "following": false, + "friends_count": 298, + "has_custom_timelines": false, + "id": 0, + "id_str": "49519281", + "is_translator": false, + "listed_count": 2, + "location": "", + "media_count": 120, + "name": "Carlos", + "normal_followers_count": 109, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/49519281/1655762374", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/3376184185/62abd64632b54fd2c43b078e34c52329_normal.jpeg", + "protected": false, + "screen_name": "solrac_mx", + "show_all_inline_media": false, + "statuses_count": 1893, + "time_zone": "", + "translator_type": "none", + "url": "", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": false + } + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688434477356261376", + "sort_index": "1688457696002441212", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688434477356261376", + "created_at": "Mon Aug 07 06:18:43 +0000 2023", + "display_text_range": [0, 117], + "entities": { + "user_mentions": [{ + "id_str": "294762072", + "name": "SANTANA VÁZQUEZ", + "screen_name": "SANRVZ", + "indices": [3, 10] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [12, 24] + }, { + "id_str": "205840868", + "name": "Protección Civil JAL", + "screen_name": "PCJalisco", + "indices": [83, 93] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/d83HdaU7Ko", + "expanded_url": "https://twitter.com/SANRVZ/status/1688394414404628480/photo/1", + "id_str": "1688394406595055616", + "indices": [94, 117], + "media_url_https": "https://pbs.twimg.com/media/F25hxG3a0AAzgGQ.jpg", + "source_status_id_str": "1688394414404628480", + "source_user_id_str": "294762072", + "type": "photo", + "url": "https://t.co/d83HdaU7Ko", + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 922, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 540, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 306, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 922, + "focus_rects": [{ + "x": 0, + "y": 510, + "w": 922, + "h": 516 + }, { + "x": 0, + "y": 307, + "w": 922, + "h": 922 + }, { + "x": 0, + "y": 243, + "w": 922, + "h": 1051 + }, { + "x": 0, + "y": 0, + "w": 922, + "h": 1844 + }, { + "x": 0, + "y": 0, + "w": 922, + "h": 2048 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/d83HdaU7Ko", + "expanded_url": "https://twitter.com/SANRVZ/status/1688394414404628480/photo/1", + "id_str": "1688394406595055616", + "indices": [94, 117], + "media_key": "3_1688394406595055616", + "media_url_https": "https://pbs.twimg.com/media/F25hxG3a0AAzgGQ.jpg", + "source_status_id_str": "1688394414404628480", + "source_user_id_str": "294762072", + "type": "photo", + "url": "https://t.co/d83HdaU7Ko", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 922, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 540, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 306, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 922, + "focus_rects": [{ + "x": 0, + "y": 510, + "w": 922, + "h": 516 + }, { + "x": 0, + "y": 307, + "w": 922, + "h": 922 + }, { + "x": 0, + "y": 243, + "w": 922, + "h": 1051 + }, { + "x": 0, + "y": 0, + "w": 922, + "h": 1844 + }, { + "x": 0, + "y": 0, + "w": 922, + "h": 2048 + }] + } + }] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @SANRVZ: @Trafico_ZMG saliendo humo de alcantarillas en Guadalupe y Tchaikovski @PCJalisco https://t.co/d83HdaU7Ko", + "id_str": "1688434477356261376", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688434477356261376", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 3, + "retweeted": false, + "text": "RT @SANRVZ: @Trafico_ZMG saliendo humo de alcantarillas en Guadalupe y Tchaikovski @PCJalisco https://t.co/d83HdaU7Ko", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "conversation_id_str": "1688394414404628480", + "created_at": "Mon Aug 07 03:39:31 +0000 2023", + "display_text_range": [0, 81], + "entities": { + "user_mentions": [{ + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [0, 12] + }, { + "id_str": "205840868", + "name": "Protección Civil JAL", + "screen_name": "PCJalisco", + "indices": [71, 81] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/d83HdaU7Ko", + "expanded_url": "https://twitter.com/SANRVZ/status/1688394414404628480/photo/1", + "id_str": "1688394406595055616", + "indices": [82, 105], + "media_url_https": "https://pbs.twimg.com/media/F25hxG3a0AAzgGQ.jpg", + "type": "photo", + "url": "https://t.co/d83HdaU7Ko", + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 922, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 540, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 306, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 922, + "focus_rects": [{ + "x": 0, + "y": 510, + "w": 922, + "h": 516 + }, { + "x": 0, + "y": 307, + "w": 922, + "h": 922 + }, { + "x": 0, + "y": 243, + "w": 922, + "h": 1051 + }, { + "x": 0, + "y": 0, + "w": 922, + "h": 1844 + }, { + "x": 0, + "y": 0, + "w": 922, + "h": 2048 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/d83HdaU7Ko", + "expanded_url": "https://twitter.com/SANRVZ/status/1688394414404628480/photo/1", + "id_str": "1688394406595055616", + "indices": [82, 105], + "media_key": "3_1688394406595055616", + "media_url_https": "https://pbs.twimg.com/media/F25hxG3a0AAzgGQ.jpg", + "type": "photo", + "url": "https://t.co/d83HdaU7Ko", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 922, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 540, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 306, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 922, + "focus_rects": [{ + "x": 0, + "y": 510, + "w": 922, + "h": 516 + }, { + "x": 0, + "y": 307, + "w": 922, + "h": 922 + }, { + "x": 0, + "y": 243, + "w": 922, + "h": 1051 + }, { + "x": 0, + "y": 0, + "w": 922, + "h": 1844 + }, { + "x": 0, + "y": 0, + "w": 922, + "h": 2048 + }] + } + }] + }, + "favorite_count": 4, + "favorited": false, + "full_text": "@Trafico_ZMG saliendo humo de alcantarillas en Guadalupe y Tchaikovski @PCJalisco https://t.co/d83HdaU7Ko", + "id_str": "1688394414404628480", + "in_reply_to_name": "Trafico_ZMG", + "in_reply_to_screen_name": "Trafico_ZMG", + "in_reply_to_user_id_str": "263809798", + "lang": "es", + "permalink": "/SANRVZ/status/1688394414404628480", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 2, + "retweet_count": 3, + "retweeted": false, + "text": "@Trafico_ZMG saliendo humo de alcantarillas en Guadalupe y Tchaikovski @PCJalisco https://t.co/d83HdaU7Ko", + "user": { + "blocking": false, + "created_at": "Sat May 07 18:33:11 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "", + "entities": { + "description": { + "urls": [] + }, + "url": {} + }, + "fast_followers_count": 0, + "favourites_count": 601, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 440, + "following": false, + "friends_count": 797, + "has_custom_timelines": false, + "id": 0, + "id_str": "294762072", + "is_translator": false, + "listed_count": 3, + "location": "", + "media_count": 139, + "name": "SANTANA VÁZQUEZ", + "normal_followers_count": 440, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/294762072/1495596731", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1324953373372772352/dwhupSDD_normal.jpg", + "protected": false, + "screen_name": "SANRVZ", + "show_all_inline_media": false, + "statuses_count": 1118, + "time_zone": "", + "translator_type": "none", + "url": "", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": false + } + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688434234870951936", + "sort_index": "1688457696002441211", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688434234870951936", + "created_at": "Mon Aug 07 06:17:45 +0000 2023", + "display_text_range": [0, 140], + "entities": { + "user_mentions": [{ + "id_str": "104161131", + "name": "Miguel Preciado", + "screen_name": "MiguelPreciado", + "indices": [3, 18] + }, { + "id_str": "122200230", + "name": "Pablo Lemus Navarro", + "screen_name": "PabloLemusN", + "indices": [20, 32] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [33, 45] + }, { + "id_str": "39809785", + "name": "Notisistema", + "screen_name": "Notisistema", + "indices": [46, 58] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @MiguelPreciado: @PabloLemusN @Trafico_ZMG @Notisistema Terrible situacion en el estacionamiento de plaza de la liberacion, las maquina…", + "id_str": "1688434234870951936", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688434234870951936", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 2, + "retweeted": false, + "text": "RT @MiguelPreciado: @PabloLemusN @Trafico_ZMG @Notisistema Terrible situacion en el estacionamiento de plaza de la liberacion, las maquina…", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "conversation_id_str": "1688389580272087042", + "created_at": "Mon Aug 07 03:20:19 +0000 2023", + "display_text_range": [0, 194], + "entities": { + "user_mentions": [{ + "id_str": "122200230", + "name": "Pablo Lemus Navarro", + "screen_name": "PabloLemusN", + "indices": [0, 12] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [13, 25] + }, { + "id_str": "39809785", + "name": "Notisistema", + "screen_name": "Notisistema", + "indices": [26, 38] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/OjAU2cJFoK", + "expanded_url": "https://twitter.com/MiguelPreciado/status/1688389580272087042/photo/1", + "id_str": "1688389573708242944", + "indices": [195, 218], + "media_url_https": "https://pbs.twimg.com/media/F25dXy9aYAAzBOA.jpg", + "type": "photo", + "url": "https://t.co/OjAU2cJFoK", + "features": { + "large": { + "faces": [{ + "x": 132, + "y": 8, + "h": 376, + "w": 376 + }] + }, + "medium": { + "faces": [{ + "x": 77, + "y": 4, + "h": 220, + "w": 220 + }] + }, + "small": { + "faces": [{ + "x": 43, + "y": 2, + "h": 124, + "w": 124 + }] + }, + "orig": { + "faces": [{ + "x": 132, + "y": 8, + "h": 376, + "w": 376 + }] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 1536, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 900, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 510, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 1536, + "focus_rects": [{ + "x": 0, + "y": 542, + "w": 1536, + "h": 860 + }, { + "x": 0, + "y": 204, + "w": 1536, + "h": 1536 + }, { + "x": 0, + "y": 97, + "w": 1536, + "h": 1751 + }, { + "x": 0, + "y": 0, + "w": 1024, + "h": 2048 + }, { + "x": 0, + "y": 0, + "w": 1536, + "h": 2048 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/OjAU2cJFoK", + "expanded_url": "https://twitter.com/MiguelPreciado/status/1688389580272087042/photo/1", + "id_str": "1688389573708242944", + "indices": [195, 218], + "media_key": "3_1688389573708242944", + "media_url_https": "https://pbs.twimg.com/media/F25dXy9aYAAzBOA.jpg", + "type": "photo", + "url": "https://t.co/OjAU2cJFoK", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [{ + "x": 132, + "y": 8, + "h": 376, + "w": 376 + }] + }, + "medium": { + "faces": [{ + "x": 77, + "y": 4, + "h": 220, + "w": 220 + }] + }, + "small": { + "faces": [{ + "x": 43, + "y": 2, + "h": 124, + "w": 124 + }] + }, + "orig": { + "faces": [{ + "x": 132, + "y": 8, + "h": 376, + "w": 376 + }] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 1536, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 900, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 510, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 1536, + "focus_rects": [{ + "x": 0, + "y": 542, + "w": 1536, + "h": 860 + }, { + "x": 0, + "y": 204, + "w": 1536, + "h": 1536 + }, { + "x": 0, + "y": 97, + "w": 1536, + "h": 1751 + }, { + "x": 0, + "y": 0, + "w": 1024, + "h": 2048 + }, { + "x": 0, + "y": 0, + "w": 1536, + "h": 2048 + }] + } + }] + }, + "favorite_count": 16, + "favorited": false, + "full_text": "@PabloLemusN @Trafico_ZMG @Notisistema Terrible situacion en el estacionamiento de plaza de la liberacion, las maquinas no funcionan y el personal no resuelve. Estamos atorados sin poder salir. https://t.co/OjAU2cJFoK", + "id_str": "1688389580272087042", + "in_reply_to_name": "PabloLemusN", + "in_reply_to_screen_name": "PabloLemusN", + "in_reply_to_user_id_str": "122200230", + "lang": "es", + "permalink": "/MiguelPreciado/status/1688389580272087042", + "possibly_sensitive": true, + "quote_count": 1, + "reply_count": 4, + "retweet_count": 2, + "retweeted": false, + "text": "@PabloLemusN @Trafico_ZMG @Notisistema Terrible situacion en el estacionamiento de plaza de la liberacion, las maquinas no funcionan y el personal no resuelve. Estamos atorados sin poder salir. https://t.co/OjAU2cJFoK", + "user": { + "blocking": false, + "created_at": "Tue Jan 12 13:26:59 +0000 2010", + "default_profile": true, + "default_profile_image": false, + "description": "Quimico, comico y musical.", + "entities": { + "description": { + "urls": [] + }, + "url": {} + }, + "fast_followers_count": 0, + "favourites_count": 165, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 21, + "following": false, + "friends_count": 162, + "has_custom_timelines": false, + "id": 0, + "id_str": "104161131", + "is_translator": false, + "listed_count": 0, + "location": "Zapopan, jalisco", + "media_count": 76, + "name": "Miguel Preciado", + "normal_followers_count": 21, + "notifications": false, + "profile_banner_url": "", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1564957613850238980/I00MLXJi_normal.jpg", + "protected": false, + "screen_name": "MiguelPreciado", + "show_all_inline_media": false, + "statuses_count": 758, + "time_zone": "", + "translator_type": "none", + "url": "", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": false + } + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688433667251544064", + "sort_index": "1688457696002441210", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688433667251544064", + "created_at": "Mon Aug 07 06:15:30 +0000 2023", + "display_text_range": [0, 140], + "entities": { + "user_mentions": [{ + "id_str": "3262789136", + "name": "Efrain C L DICE Y TE ESCUCHA", + "screen_name": "Efraincl83_MX", + "indices": [3, 17] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [47, 59] + }], + "urls": [], + "hashtags": [{ + "indices": [19, 34], + "text": "Síguemeytesigo" + }], + "symbols": [], + "media": [] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @Efraincl83_MX: #Síguemeytesigo \nseñores de @Trafico_ZMG qué tan cierto es que los conductores de la ruta 175 no tienen obligación de ay…", + "id_str": "1688433667251544064", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688433667251544064", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 4, + "retweeted": false, + "text": "RT @Efraincl83_MX: #Síguemeytesigo \nseñores de @Trafico_ZMG qué tan cierto es que los conductores de la ruta 175 no tienen obligación de ay…", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "conversation_id_str": "1688385779326758915", + "created_at": "Mon Aug 07 03:05:13 +0000 2023", + "display_text_range": [0, 277], + "entities": { + "user_mentions": [{ + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [28, 40] + }], + "urls": [], + "hashtags": [{ + "indices": [0, 15], + "text": "Síguemeytesigo" + }], + "symbols": [], + "media": [] + }, + "favorite_count": 7, + "favorited": false, + "full_text": "#Síguemeytesigo \nseñores de @Trafico_ZMG qué tan cierto es que los conductores de la ruta 175 no tienen obligación de ayudarnos a los ciegos a pasar nuestra tarjeta para que paguemos? El del camión en en que vengo en este momento, viene hablando por teléfono y se negó a apoyar", + "id_str": "1688385779326758915", + "lang": "es", + "permalink": "/Efraincl83_MX/status/1688385779326758915", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 4, + "retweeted": false, + "text": "#Síguemeytesigo \nseñores de @Trafico_ZMG qué tan cierto es que los conductores de la ruta 175 no tienen obligación de ayudarnos a los ciegos a pasar nuestra tarjeta para que paguemos? El del camión en en que vengo en este momento, viene hablando por teléfono y se negó a apoyar", + "user": { + "blocking": false, + "created_at": "Wed Jul 01 02:43:31 +0000 2015", + "default_profile": true, + "default_profile_image": false, + "description": "Soy ciego... estudié comunicación... he trabajado por mi cuenta en mis propios proyectos... no me debo a ningún medio... Yo soy tu comunicador independiente", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "facebook.com/efrain.cardena…", + "expanded_url": "https://www.facebook.com/efrain.cardenas.581", + "url": "https://t.co/1tILyuFy4X", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 137, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1103, + "following": false, + "friends_count": 2044, + "has_custom_timelines": false, + "id": 0, + "id_str": "3262789136", + "is_translator": false, + "listed_count": 3, + "location": "Colima, México", + "media_count": 383, + "name": "Efrain C L DICE Y TE ESCUCHA", + "normal_followers_count": 1103, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/3262789136/1543358475", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1550889297569513472/CUJw-MpQ_normal.jpg", + "protected": false, + "screen_name": "Efraincl83_MX", + "show_all_inline_media": false, + "statuses_count": 2243, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/1tILyuFy4X", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": false + } + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688433354847236096", + "sort_index": "1688457696002441209", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688433354847236096", + "created_at": "Mon Aug 07 06:14:16 +0000 2023", + "display_text_range": [0, 140], + "entities": { + "user_mentions": [{ + "id_str": "175330622", + "name": "Manuel Torres", + "screen_name": "Deejayethan", + "indices": [3, 15] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [17, 29] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @Deejayethan: @Trafico_ZMG una de las dos unicas filas para pagar el estacionamiento de los 3 poderes debajo de la plaza de armas, más d…", + "id_str": "1688433354847236096", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688433354847236096", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 2, + "retweeted": false, + "text": "RT @Deejayethan: @Trafico_ZMG una de las dos unicas filas para pagar el estacionamiento de los 3 poderes debajo de la plaza de armas, más d…", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "conversation_id_str": "1688384332107296769", + "created_at": "Mon Aug 07 02:59:28 +0000 2023", + "display_text_range": [0, 191], + "entities": { + "user_mentions": [{ + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [0, 12] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/sr18KrkwxS", + "expanded_url": "https://twitter.com/Deejayethan/status/1688384332107296769/photo/1", + "id_str": "1688384325883150337", + "indices": [192, 215], + "media_url_https": "https://pbs.twimg.com/media/F25YmVSaQAEohPX.jpg", + "type": "photo", + "url": "https://t.co/sr18KrkwxS", + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 1536, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 900, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 510, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 1536, + "focus_rects": [{ + "x": 0, + "y": 645, + "w": 1536, + "h": 860 + }, { + "x": 0, + "y": 307, + "w": 1536, + "h": 1536 + }, { + "x": 0, + "y": 200, + "w": 1536, + "h": 1751 + }, { + "x": 460, + "y": 0, + "w": 1024, + "h": 2048 + }, { + "x": 0, + "y": 0, + "w": 1536, + "h": 2048 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/sr18KrkwxS", + "expanded_url": "https://twitter.com/Deejayethan/status/1688384332107296769/photo/1", + "id_str": "1688384325883150337", + "indices": [192, 215], + "media_key": "3_1688384325883150337", + "media_url_https": "https://pbs.twimg.com/media/F25YmVSaQAEohPX.jpg", + "type": "photo", + "url": "https://t.co/sr18KrkwxS", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 1536, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 900, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 510, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 1536, + "focus_rects": [{ + "x": 0, + "y": 645, + "w": 1536, + "h": 860 + }, { + "x": 0, + "y": 307, + "w": 1536, + "h": 1536 + }, { + "x": 0, + "y": 200, + "w": 1536, + "h": 1751 + }, { + "x": 460, + "y": 0, + "w": 1024, + "h": 2048 + }, { + "x": 0, + "y": 0, + "w": 1536, + "h": 2048 + }] + } + }] + }, + "favorite_count": 11, + "favorited": false, + "full_text": "@Trafico_ZMG una de las dos unicas filas para pagar el estacionamiento de los 3 poderes debajo de la plaza de armas, más de 100 personas esperando a pagar porque solo funcionan dos maquinas ! https://t.co/sr18KrkwxS", + "id_str": "1688384332107296769", + "in_reply_to_name": "Trafico_ZMG", + "in_reply_to_screen_name": "Trafico_ZMG", + "in_reply_to_user_id_str": "263809798", + "lang": "es", + "permalink": "/Deejayethan/status/1688384332107296769", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 3, + "retweet_count": 2, + "retweeted": false, + "text": "@Trafico_ZMG una de las dos unicas filas para pagar el estacionamiento de los 3 poderes debajo de la plaza de armas, más de 100 personas esperando a pagar porque solo funcionan dos maquinas ! https://t.co/sr18KrkwxS", + "user": { + "blocking": false, + "created_at": "Fri Aug 06 09:01:15 +0000 2010", + "default_profile": false, + "default_profile_image": false, + "description": "Abogado, tecnólogo, me gusta la ciber seguridad y los carros. \nim not here", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "facebook.com/JDMGuadalajara", + "expanded_url": "https://www.facebook.com/JDMGuadalajara", + "url": "https://t.co/oDsLXWWTGT", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 2335, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 200, + "following": false, + "friends_count": 937, + "has_custom_timelines": false, + "id": 0, + "id_str": "175330622", + "is_translator": false, + "listed_count": 2, + "location": "Mexico", + "media_count": 117, + "name": "Manuel Torres", + "normal_followers_count": 200, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/175330622/1659200898", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1574452646647316481/AsH1fUa0_normal.jpg", + "protected": false, + "screen_name": "Deejayethan", + "show_all_inline_media": false, + "statuses_count": 3260, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/oDsLXWWTGT", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": false + } + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688431935716986880", + "sort_index": "1688457696002441208", + "content": { + "tweet": { + "id": 0, + "location": "", + "card": { + "name": "summary_large_image", + "url": "https://t.co/PK2Loy8DGI", + "card_type_url": "http://card-type-url-is-deprecated.invalid", + "binding_values": { + "photo_image_full_size_large": { + "image_value": { + "height": 419, + "width": 800, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=800x419" + }, + "type": "IMAGE" + }, + "thumbnail_image": { + "image_value": { + "height": 150, + "width": 267, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=280x150" + }, + "type": "IMAGE" + }, + "description": { + "string_value": "Tras la Intensa lluvia que azotó a la ciudad el pasado Jueves, un vehículo fue arrastrado por las fuertes corrientes sobre avenida Malecón y Periférico. José Eugenio, el conductor del automóvil, no...", + "type": "STRING" + }, + "domain": { + "string_value": "traficozmg.com", + "type": "STRING" + }, + "thumbnail_image_large": { + "image_value": { + "height": 320, + "width": 569, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=800x320_1" + }, + "type": "IMAGE" + }, + "summary_photo_image_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=386x202" + }, + "type": "IMAGE" + }, + "thumbnail_image_original": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + }, + "site": { + "scribe_key": "publisher_id", + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "photo_image_full_size_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=386x202" + }, + "type": "IMAGE" + }, + "summary_photo_image_large": { + "image_value": { + "height": 419, + "width": 800, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=800x419" + }, + "type": "IMAGE" + }, + "thumbnail_image_small": { + "image_value": { + "height": 81, + "width": 144, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=144x144" + }, + "type": "IMAGE" + }, + "creator": { + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "thumbnail_image_x_large": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "photo_image_full_size_original": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + }, + "vanity_url": { + "scribe_key": "vanity_url", + "string_value": "traficozmg.com", + "type": "STRING" + }, + "photo_image_full_size": { + "image_value": { + "height": 314, + "width": 600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 174, + "green": 183, + "red": 181 + }, + "percentage": 42.32 + }, { + "rgb": { + "blue": 94, + "green": 103, + "red": 103 + }, + "percentage": 39.77 + }, { + "rgb": { + "blue": 88, + "green": 132, + "red": 110 + }, + "percentage": 11.34 + }, { + "rgb": { + "blue": 33, + "green": 40, + "red": 40 + }, + "percentage": 3.47 + }, { + "rgb": { + "blue": 59, + "green": 50, + "red": 45 + }, + "percentage": 0.68 + }] + }, + "type": "IMAGE_COLOR" + }, + "title": { + "string_value": "José Eugenio no aparece, se cumplieron 36 horas de intensas labores de búsqueda - Tráfico ZMG", + "type": "STRING" + }, + "summary_photo_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 174, + "green": 183, + "red": 181 + }, + "percentage": 42.32 + }, { + "rgb": { + "blue": 94, + "green": 103, + "red": 103 + }, + "percentage": 39.77 + }, { + "rgb": { + "blue": 88, + "green": 132, + "red": 110 + }, + "percentage": 11.34 + }, { + "rgb": { + "blue": 33, + "green": 40, + "red": 40 + }, + "percentage": 3.47 + }, { + "rgb": { + "blue": 59, + "green": 50, + "red": 45 + }, + "percentage": 0.68 + }] + }, + "type": "IMAGE_COLOR" + }, + "summary_photo_image_x_large": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "summary_photo_image": { + "image_value": { + "height": 314, + "width": 600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=600x314" + }, + "type": "IMAGE" + }, + "photo_image_full_size_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 174, + "green": 183, + "red": 181 + }, + "percentage": 42.32 + }, { + "rgb": { + "blue": 94, + "green": 103, + "red": 103 + }, + "percentage": 39.77 + }, { + "rgb": { + "blue": 88, + "green": 132, + "red": 110 + }, + "percentage": 11.34 + }, { + "rgb": { + "blue": 33, + "green": 40, + "red": 40 + }, + "percentage": 3.47 + }, { + "rgb": { + "blue": 59, + "green": 50, + "red": 45 + }, + "percentage": 0.68 + }] + }, + "type": "IMAGE_COLOR" + }, + "photo_image_full_size_x_large": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "card_url": { + "scribe_key": "card_url", + "string_value": "https://t.co/PK2Loy8DGI", + "type": "STRING" + }, + "summary_photo_image_original": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + } + }, + "users": {} + }, + "conversation_id_str": "1688431935716986880", + "created_at": "Mon Aug 07 06:08:37 +0000 2023", + "display_text_range": [0, 140], + "entities": { + "user_mentions": [{ + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [3, 15] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @Trafico_ZMG: Tras la Intensa lluvia que azotó a la ciudad el pasado Jueves, un vehículo fue arrastrado por las fuertes corrientes sobre…", + "id_str": "1688431935716986880", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688431935716986880", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 3, + "retweeted": false, + "text": "RT @Trafico_ZMG: Tras la Intensa lluvia que azotó a la ciudad el pasado Jueves, un vehículo fue arrastrado por las fuertes corrientes sobre…", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "card": { + "name": "summary_large_image", + "url": "https://t.co/PK2Loy8DGI", + "card_type_url": "http://card-type-url-is-deprecated.invalid", + "binding_values": { + "photo_image_full_size_large": { + "image_value": { + "height": 419, + "width": 800, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=800x419" + }, + "type": "IMAGE" + }, + "thumbnail_image": { + "image_value": { + "height": 150, + "width": 267, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=280x150" + }, + "type": "IMAGE" + }, + "description": { + "string_value": "Tras la Intensa lluvia que azotó a la ciudad el pasado Jueves, un vehículo fue arrastrado por las fuertes corrientes sobre avenida Malecón y Periférico. José Eugenio, el conductor del automóvil, no...", + "type": "STRING" + }, + "domain": { + "string_value": "traficozmg.com", + "type": "STRING" + }, + "thumbnail_image_large": { + "image_value": { + "height": 320, + "width": 569, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=800x320_1" + }, + "type": "IMAGE" + }, + "summary_photo_image_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=386x202" + }, + "type": "IMAGE" + }, + "thumbnail_image_original": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + }, + "site": { + "scribe_key": "publisher_id", + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "photo_image_full_size_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=386x202" + }, + "type": "IMAGE" + }, + "summary_photo_image_large": { + "image_value": { + "height": 419, + "width": 800, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=800x419" + }, + "type": "IMAGE" + }, + "thumbnail_image_small": { + "image_value": { + "height": 81, + "width": 144, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=144x144" + }, + "type": "IMAGE" + }, + "creator": { + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "thumbnail_image_x_large": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "photo_image_full_size_original": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + }, + "vanity_url": { + "scribe_key": "vanity_url", + "string_value": "traficozmg.com", + "type": "STRING" + }, + "photo_image_full_size": { + "image_value": { + "height": 314, + "width": 600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 174, + "green": 183, + "red": 181 + }, + "percentage": 42.32 + }, { + "rgb": { + "blue": 94, + "green": 103, + "red": 103 + }, + "percentage": 39.77 + }, { + "rgb": { + "blue": 88, + "green": 132, + "red": 110 + }, + "percentage": 11.34 + }, { + "rgb": { + "blue": 33, + "green": 40, + "red": 40 + }, + "percentage": 3.47 + }, { + "rgb": { + "blue": 59, + "green": 50, + "red": 45 + }, + "percentage": 0.68 + }] + }, + "type": "IMAGE_COLOR" + }, + "title": { + "string_value": "José Eugenio no aparece, se cumplieron 36 horas de intensas labores de búsqueda - Tráfico ZMG", + "type": "STRING" + }, + "summary_photo_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 174, + "green": 183, + "red": 181 + }, + "percentage": 42.32 + }, { + "rgb": { + "blue": 94, + "green": 103, + "red": 103 + }, + "percentage": 39.77 + }, { + "rgb": { + "blue": 88, + "green": 132, + "red": 110 + }, + "percentage": 11.34 + }, { + "rgb": { + "blue": 33, + "green": 40, + "red": 40 + }, + "percentage": 3.47 + }, { + "rgb": { + "blue": 59, + "green": 50, + "red": 45 + }, + "percentage": 0.68 + }] + }, + "type": "IMAGE_COLOR" + }, + "summary_photo_image_x_large": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "summary_photo_image": { + "image_value": { + "height": 314, + "width": 600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=600x314" + }, + "type": "IMAGE" + }, + "photo_image_full_size_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 174, + "green": 183, + "red": 181 + }, + "percentage": 42.32 + }, { + "rgb": { + "blue": 94, + "green": 103, + "red": 103 + }, + "percentage": 39.77 + }, { + "rgb": { + "blue": 88, + "green": 132, + "red": 110 + }, + "percentage": 11.34 + }, { + "rgb": { + "blue": 33, + "green": 40, + "red": 40 + }, + "percentage": 3.47 + }, { + "rgb": { + "blue": 59, + "green": 50, + "red": 45 + }, + "percentage": 0.68 + }] + }, + "type": "IMAGE_COLOR" + }, + "photo_image_full_size_x_large": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "card_url": { + "scribe_key": "card_url", + "string_value": "https://t.co/PK2Loy8DGI", + "type": "STRING" + }, + "summary_photo_image_original": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + } + }, + "users": {} + }, + "conversation_id_str": "1688431870936014848", + "created_at": "Mon Aug 07 06:08:22 +0000 2023", + "display_text_range": [0, 246], + "entities": { + "user_mentions": [], + "urls": [{ + "display_url": "traficozmg.com/2023/08/jose-e…", + "expanded_url": "https://traficozmg.com/2023/08/jose-eugenio-no-aparece-se-cumplieron-36-horas-de-intensas-labores-de-busqueda/", + "url": "https://t.co/PK2Loy8DGI", + "indices": [223, 246] + }], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 11, + "favorited": false, + "full_text": "Tras la Intensa lluvia que azotó a la ciudad el pasado Jueves, un vehículo fue arrastrado por las fuertes corrientes sobre avenida Malecón y Periférico. José Eugenio, el conductor del automóvil, no ha podido ser localizado https://t.co/PK2Loy8DGI", + "id_str": "1688431870936014848", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688431870936014848", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 3, + "retweeted": false, + "text": "Tras la Intensa lluvia que azotó a la ciudad el pasado Jueves, un vehículo fue arrastrado por las fuertes corrientes sobre avenida Malecón y Periférico. José Eugenio, el conductor del automóvil, no ha podido ser localizado https://t.co/PK2Loy8DGI", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688431870936014848", + "sort_index": "1688457696002441207", + "content": { + "tweet": { + "id": 0, + "location": "", + "card": { + "name": "summary_large_image", + "url": "https://t.co/PK2Loy8DGI", + "card_type_url": "http://card-type-url-is-deprecated.invalid", + "binding_values": { + "photo_image_full_size_large": { + "image_value": { + "height": 419, + "width": 800, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=800x419" + }, + "type": "IMAGE" + }, + "thumbnail_image": { + "image_value": { + "height": 150, + "width": 267, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=280x150" + }, + "type": "IMAGE" + }, + "description": { + "string_value": "Tras la Intensa lluvia que azotó a la ciudad el pasado Jueves, un vehículo fue arrastrado por las fuertes corrientes sobre avenida Malecón y Periférico. José Eugenio, el conductor del automóvil, no...", + "type": "STRING" + }, + "domain": { + "string_value": "traficozmg.com", + "type": "STRING" + }, + "thumbnail_image_large": { + "image_value": { + "height": 320, + "width": 569, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=800x320_1" + }, + "type": "IMAGE" + }, + "summary_photo_image_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=386x202" + }, + "type": "IMAGE" + }, + "thumbnail_image_original": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + }, + "site": { + "scribe_key": "publisher_id", + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "photo_image_full_size_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=386x202" + }, + "type": "IMAGE" + }, + "summary_photo_image_large": { + "image_value": { + "height": 419, + "width": 800, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=800x419" + }, + "type": "IMAGE" + }, + "thumbnail_image_small": { + "image_value": { + "height": 81, + "width": 144, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=144x144" + }, + "type": "IMAGE" + }, + "creator": { + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "thumbnail_image_x_large": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "photo_image_full_size_original": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + }, + "vanity_url": { + "scribe_key": "vanity_url", + "string_value": "traficozmg.com", + "type": "STRING" + }, + "photo_image_full_size": { + "image_value": { + "height": 314, + "width": 600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 174, + "green": 183, + "red": 181 + }, + "percentage": 42.32 + }, { + "rgb": { + "blue": 94, + "green": 103, + "red": 103 + }, + "percentage": 39.77 + }, { + "rgb": { + "blue": 88, + "green": 132, + "red": 110 + }, + "percentage": 11.34 + }, { + "rgb": { + "blue": 33, + "green": 40, + "red": 40 + }, + "percentage": 3.47 + }, { + "rgb": { + "blue": 59, + "green": 50, + "red": 45 + }, + "percentage": 0.68 + }] + }, + "type": "IMAGE_COLOR" + }, + "title": { + "string_value": "José Eugenio no aparece, se cumplieron 36 horas de intensas labores de búsqueda - Tráfico ZMG", + "type": "STRING" + }, + "summary_photo_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 174, + "green": 183, + "red": 181 + }, + "percentage": 42.32 + }, { + "rgb": { + "blue": 94, + "green": 103, + "red": 103 + }, + "percentage": 39.77 + }, { + "rgb": { + "blue": 88, + "green": 132, + "red": 110 + }, + "percentage": 11.34 + }, { + "rgb": { + "blue": 33, + "green": 40, + "red": 40 + }, + "percentage": 3.47 + }, { + "rgb": { + "blue": 59, + "green": 50, + "red": 45 + }, + "percentage": 0.68 + }] + }, + "type": "IMAGE_COLOR" + }, + "summary_photo_image_x_large": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "summary_photo_image": { + "image_value": { + "height": 314, + "width": 600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=600x314" + }, + "type": "IMAGE" + }, + "photo_image_full_size_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 174, + "green": 183, + "red": 181 + }, + "percentage": 42.32 + }, { + "rgb": { + "blue": 94, + "green": 103, + "red": 103 + }, + "percentage": 39.77 + }, { + "rgb": { + "blue": 88, + "green": 132, + "red": 110 + }, + "percentage": 11.34 + }, { + "rgb": { + "blue": 33, + "green": 40, + "red": 40 + }, + "percentage": 3.47 + }, { + "rgb": { + "blue": 59, + "green": 50, + "red": 45 + }, + "percentage": 0.68 + }] + }, + "type": "IMAGE_COLOR" + }, + "photo_image_full_size_x_large": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "card_url": { + "scribe_key": "card_url", + "string_value": "https://t.co/PK2Loy8DGI", + "type": "STRING" + }, + "summary_photo_image_original": { + "image_value": { + "height": 900, + "width": 1600, + "url": "https://pbs.twimg.com/card_img/1688431786190045184/ciyDeO1V?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + } + }, + "users": {} + }, + "conversation_id_str": "1688431870936014848", + "created_at": "Mon Aug 07 06:08:22 +0000 2023", + "display_text_range": [0, 246], + "entities": { + "user_mentions": [], + "urls": [{ + "display_url": "traficozmg.com/2023/08/jose-e…", + "expanded_url": "https://traficozmg.com/2023/08/jose-eugenio-no-aparece-se-cumplieron-36-horas-de-intensas-labores-de-busqueda/", + "url": "https://t.co/PK2Loy8DGI", + "indices": [223, 246] + }], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 11, + "favorited": false, + "full_text": "Tras la Intensa lluvia que azotó a la ciudad el pasado Jueves, un vehículo fue arrastrado por las fuertes corrientes sobre avenida Malecón y Periférico. José Eugenio, el conductor del automóvil, no ha podido ser localizado https://t.co/PK2Loy8DGI", + "id_str": "1688431870936014848", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688431870936014848", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 3, + "retweeted": false, + "text": "Tras la Intensa lluvia que azotó a la ciudad el pasado Jueves, un vehículo fue arrastrado por las fuertes corrientes sobre avenida Malecón y Periférico. José Eugenio, el conductor del automóvil, no ha podido ser localizado https://t.co/PK2Loy8DGI", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688424151416033280", + "sort_index": "1688457696002441206", + "content": { + "tweet": { + "id": 0, + "location": "", + "card": { + "name": "summary_large_image", + "url": "https://t.co/9dG6J9EfAH", + "card_type_url": "http://card-type-url-is-deprecated.invalid", + "binding_values": { + "photo_image_full_size_large": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image": { + "image_value": { + "height": 150, + "width": 280, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=280x150" + }, + "type": "IMAGE" + }, + "description": { + "string_value": "Policías de Guadalajara, rescataron a un hombre que pretendía colgarse de un árbol, utilizando cables. Este hecho tuvo lugar en calles de la colonia Lomas del Paraíso, en Guadalajara", + "type": "STRING" + }, + "domain": { + "string_value": "traficozmg.com", + "type": "STRING" + }, + "thumbnail_image_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=800x320_1" + }, + "type": "IMAGE" + }, + "summary_photo_image_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=386x202" + }, + "type": "IMAGE" + }, + "thumbnail_image_original": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=orig" + }, + "type": "IMAGE" + }, + "site": { + "scribe_key": "publisher_id", + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "photo_image_full_size_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=386x202" + }, + "type": "IMAGE" + }, + "summary_photo_image_large": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_small": { + "image_value": { + "height": 77, + "width": 144, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=144x144" + }, + "type": "IMAGE" + }, + "creator": { + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "thumbnail_image_x_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "photo_image_full_size_original": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=orig" + }, + "type": "IMAGE" + }, + "vanity_url": { + "scribe_key": "vanity_url", + "string_value": "traficozmg.com", + "type": "STRING" + }, + "photo_image_full_size": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 43, + "green": 41, + "red": 45 + }, + "percentage": 62.05 + }, { + "rgb": { + "blue": 177, + "green": 168, + "red": 173 + }, + "percentage": 22.27 + }, { + "rgb": { + "blue": 65, + "green": 91, + "red": 80 + }, + "percentage": 3.16 + }, { + "rgb": { + "blue": 101, + "green": 73, + "red": 52 + }, + "percentage": 1.86 + }, { + "rgb": { + "blue": 45, + "green": 32, + "red": 88 + }, + "percentage": 1.29 + }] + }, + "type": "IMAGE_COLOR" + }, + "title": { + "string_value": "Rescatan en Guadalajara a un hombre que colgaba de un árbol - Tráfico ZMG", + "type": "STRING" + }, + "summary_photo_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 43, + "green": 41, + "red": 45 + }, + "percentage": 62.05 + }, { + "rgb": { + "blue": 177, + "green": 168, + "red": 173 + }, + "percentage": 22.27 + }, { + "rgb": { + "blue": 65, + "green": 91, + "red": 80 + }, + "percentage": 3.16 + }, { + "rgb": { + "blue": 101, + "green": 73, + "red": 52 + }, + "percentage": 1.86 + }, { + "rgb": { + "blue": 45, + "green": 32, + "red": 88 + }, + "percentage": 1.29 + }] + }, + "type": "IMAGE_COLOR" + }, + "summary_photo_image_x_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "summary_photo_image": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "photo_image_full_size_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 43, + "green": 41, + "red": 45 + }, + "percentage": 62.05 + }, { + "rgb": { + "blue": 177, + "green": 168, + "red": 173 + }, + "percentage": 22.27 + }, { + "rgb": { + "blue": 65, + "green": 91, + "red": 80 + }, + "percentage": 3.16 + }, { + "rgb": { + "blue": 101, + "green": 73, + "red": 52 + }, + "percentage": 1.86 + }, { + "rgb": { + "blue": 45, + "green": 32, + "red": 88 + }, + "percentage": 1.29 + }] + }, + "type": "IMAGE_COLOR" + }, + "photo_image_full_size_x_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "card_url": { + "scribe_key": "card_url", + "string_value": "https://t.co/9dG6J9EfAH", + "type": "STRING" + }, + "summary_photo_image_original": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=orig" + }, + "type": "IMAGE" + } + }, + "users": {} + }, + "conversation_id_str": "1688424151416033280", + "created_at": "Mon Aug 07 05:37:41 +0000 2023", + "display_text_range": [0, 140], + "entities": { + "user_mentions": [{ + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [3, 15] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @Trafico_ZMG: Policías de Guadalajara, rescataron a un hombre que pretendía colgarse de un árbol, utilizando cables. Este hecho tuvo lug…", + "id_str": "1688424151416033280", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688424151416033280", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 2, + "retweeted": false, + "text": "RT @Trafico_ZMG: Policías de Guadalajara, rescataron a un hombre que pretendía colgarse de un árbol, utilizando cables. Este hecho tuvo lug…", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "card": { + "name": "summary_large_image", + "url": "https://t.co/9dG6J9EfAH", + "card_type_url": "http://card-type-url-is-deprecated.invalid", + "binding_values": { + "photo_image_full_size_large": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image": { + "image_value": { + "height": 150, + "width": 280, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=280x150" + }, + "type": "IMAGE" + }, + "description": { + "string_value": "Policías de Guadalajara, rescataron a un hombre que pretendía colgarse de un árbol, utilizando cables. Este hecho tuvo lugar en calles de la colonia Lomas del Paraíso, en Guadalajara", + "type": "STRING" + }, + "domain": { + "string_value": "traficozmg.com", + "type": "STRING" + }, + "thumbnail_image_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=800x320_1" + }, + "type": "IMAGE" + }, + "summary_photo_image_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=386x202" + }, + "type": "IMAGE" + }, + "thumbnail_image_original": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=orig" + }, + "type": "IMAGE" + }, + "site": { + "scribe_key": "publisher_id", + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "photo_image_full_size_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=386x202" + }, + "type": "IMAGE" + }, + "summary_photo_image_large": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_small": { + "image_value": { + "height": 77, + "width": 144, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=144x144" + }, + "type": "IMAGE" + }, + "creator": { + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "thumbnail_image_x_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "photo_image_full_size_original": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=orig" + }, + "type": "IMAGE" + }, + "vanity_url": { + "scribe_key": "vanity_url", + "string_value": "traficozmg.com", + "type": "STRING" + }, + "photo_image_full_size": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 43, + "green": 41, + "red": 45 + }, + "percentage": 62.05 + }, { + "rgb": { + "blue": 177, + "green": 168, + "red": 173 + }, + "percentage": 22.27 + }, { + "rgb": { + "blue": 65, + "green": 91, + "red": 80 + }, + "percentage": 3.16 + }, { + "rgb": { + "blue": 101, + "green": 73, + "red": 52 + }, + "percentage": 1.86 + }, { + "rgb": { + "blue": 45, + "green": 32, + "red": 88 + }, + "percentage": 1.29 + }] + }, + "type": "IMAGE_COLOR" + }, + "title": { + "string_value": "Rescatan en Guadalajara a un hombre que colgaba de un árbol - Tráfico ZMG", + "type": "STRING" + }, + "summary_photo_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 43, + "green": 41, + "red": 45 + }, + "percentage": 62.05 + }, { + "rgb": { + "blue": 177, + "green": 168, + "red": 173 + }, + "percentage": 22.27 + }, { + "rgb": { + "blue": 65, + "green": 91, + "red": 80 + }, + "percentage": 3.16 + }, { + "rgb": { + "blue": 101, + "green": 73, + "red": 52 + }, + "percentage": 1.86 + }, { + "rgb": { + "blue": 45, + "green": 32, + "red": 88 + }, + "percentage": 1.29 + }] + }, + "type": "IMAGE_COLOR" + }, + "summary_photo_image_x_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "summary_photo_image": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "photo_image_full_size_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 43, + "green": 41, + "red": 45 + }, + "percentage": 62.05 + }, { + "rgb": { + "blue": 177, + "green": 168, + "red": 173 + }, + "percentage": 22.27 + }, { + "rgb": { + "blue": 65, + "green": 91, + "red": 80 + }, + "percentage": 3.16 + }, { + "rgb": { + "blue": 101, + "green": 73, + "red": 52 + }, + "percentage": 1.86 + }, { + "rgb": { + "blue": 45, + "green": 32, + "red": 88 + }, + "percentage": 1.29 + }] + }, + "type": "IMAGE_COLOR" + }, + "photo_image_full_size_x_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "card_url": { + "scribe_key": "card_url", + "string_value": "https://t.co/9dG6J9EfAH", + "type": "STRING" + }, + "summary_photo_image_original": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=orig" + }, + "type": "IMAGE" + } + }, + "users": {} + }, + "conversation_id_str": "1688424135574093824", + "created_at": "Mon Aug 07 05:37:37 +0000 2023", + "display_text_range": [0, 206], + "entities": { + "user_mentions": [], + "urls": [{ + "display_url": "traficozmg.com/2023/08/rescat…", + "expanded_url": "https://traficozmg.com/2023/08/rescatan-en-guadalajara-a-un-hombre-que-colgaba-de-un-arbol/", + "url": "https://t.co/9dG6J9EfAH", + "indices": [183, 206] + }], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 10, + "favorited": false, + "full_text": "Policías de Guadalajara, rescataron a un hombre que pretendía colgarse de un árbol, utilizando cables. Este hecho tuvo lugar en calles de la colonia Lomas del Paraíso, en Guadalajara https://t.co/9dG6J9EfAH", + "id_str": "1688424135574093824", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688424135574093824", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 2, + "retweeted": false, + "text": "Policías de Guadalajara, rescataron a un hombre que pretendía colgarse de un árbol, utilizando cables. Este hecho tuvo lugar en calles de la colonia Lomas del Paraíso, en Guadalajara https://t.co/9dG6J9EfAH", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688424135574093824", + "sort_index": "1688457696002441205", + "content": { + "tweet": { + "id": 0, + "location": "", + "card": { + "name": "summary_large_image", + "url": "https://t.co/9dG6J9EfAH", + "card_type_url": "http://card-type-url-is-deprecated.invalid", + "binding_values": { + "photo_image_full_size_large": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image": { + "image_value": { + "height": 150, + "width": 280, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=280x150" + }, + "type": "IMAGE" + }, + "description": { + "string_value": "Policías de Guadalajara, rescataron a un hombre que pretendía colgarse de un árbol, utilizando cables. Este hecho tuvo lugar en calles de la colonia Lomas del Paraíso, en Guadalajara", + "type": "STRING" + }, + "domain": { + "string_value": "traficozmg.com", + "type": "STRING" + }, + "thumbnail_image_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=800x320_1" + }, + "type": "IMAGE" + }, + "summary_photo_image_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=386x202" + }, + "type": "IMAGE" + }, + "thumbnail_image_original": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=orig" + }, + "type": "IMAGE" + }, + "site": { + "scribe_key": "publisher_id", + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "photo_image_full_size_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=386x202" + }, + "type": "IMAGE" + }, + "summary_photo_image_large": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_small": { + "image_value": { + "height": 77, + "width": 144, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=144x144" + }, + "type": "IMAGE" + }, + "creator": { + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "thumbnail_image_x_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "photo_image_full_size_original": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=orig" + }, + "type": "IMAGE" + }, + "vanity_url": { + "scribe_key": "vanity_url", + "string_value": "traficozmg.com", + "type": "STRING" + }, + "photo_image_full_size": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 43, + "green": 41, + "red": 45 + }, + "percentage": 62.05 + }, { + "rgb": { + "blue": 177, + "green": 168, + "red": 173 + }, + "percentage": 22.27 + }, { + "rgb": { + "blue": 65, + "green": 91, + "red": 80 + }, + "percentage": 3.16 + }, { + "rgb": { + "blue": 101, + "green": 73, + "red": 52 + }, + "percentage": 1.86 + }, { + "rgb": { + "blue": 45, + "green": 32, + "red": 88 + }, + "percentage": 1.29 + }] + }, + "type": "IMAGE_COLOR" + }, + "title": { + "string_value": "Rescatan en Guadalajara a un hombre que colgaba de un árbol - Tráfico ZMG", + "type": "STRING" + }, + "summary_photo_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 43, + "green": 41, + "red": 45 + }, + "percentage": 62.05 + }, { + "rgb": { + "blue": 177, + "green": 168, + "red": 173 + }, + "percentage": 22.27 + }, { + "rgb": { + "blue": 65, + "green": 91, + "red": 80 + }, + "percentage": 3.16 + }, { + "rgb": { + "blue": 101, + "green": 73, + "red": 52 + }, + "percentage": 1.86 + }, { + "rgb": { + "blue": 45, + "green": 32, + "red": 88 + }, + "percentage": 1.29 + }] + }, + "type": "IMAGE_COLOR" + }, + "summary_photo_image_x_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "summary_photo_image": { + "image_value": { + "height": 293, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=600x314" + }, + "type": "IMAGE" + }, + "photo_image_full_size_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 43, + "green": 41, + "red": 45 + }, + "percentage": 62.05 + }, { + "rgb": { + "blue": 177, + "green": 168, + "red": 173 + }, + "percentage": 22.27 + }, { + "rgb": { + "blue": 65, + "green": 91, + "red": 80 + }, + "percentage": 3.16 + }, { + "rgb": { + "blue": 101, + "green": 73, + "red": 52 + }, + "percentage": 1.86 + }, { + "rgb": { + "blue": 45, + "green": 32, + "red": 88 + }, + "percentage": 1.29 + }] + }, + "type": "IMAGE_COLOR" + }, + "photo_image_full_size_x_large": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "card_url": { + "scribe_key": "card_url", + "string_value": "https://t.co/9dG6J9EfAH", + "type": "STRING" + }, + "summary_photo_image_original": { + "image_value": { + "height": 300, + "width": 559, + "url": "https://pbs.twimg.com/card_img/1688424050932981761/ddnm_zfg?format=png\u0026name=orig" + }, + "type": "IMAGE" + } + }, + "users": {} + }, + "conversation_id_str": "1688424135574093824", + "created_at": "Mon Aug 07 05:37:37 +0000 2023", + "display_text_range": [0, 206], + "entities": { + "user_mentions": [], + "urls": [{ + "display_url": "traficozmg.com/2023/08/rescat…", + "expanded_url": "https://traficozmg.com/2023/08/rescatan-en-guadalajara-a-un-hombre-que-colgaba-de-un-arbol/", + "url": "https://t.co/9dG6J9EfAH", + "indices": [183, 206] + }], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 10, + "favorited": false, + "full_text": "Policías de Guadalajara, rescataron a un hombre que pretendía colgarse de un árbol, utilizando cables. Este hecho tuvo lugar en calles de la colonia Lomas del Paraíso, en Guadalajara https://t.co/9dG6J9EfAH", + "id_str": "1688424135574093824", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688424135574093824", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 2, + "retweeted": false, + "text": "Policías de Guadalajara, rescataron a un hombre que pretendía colgarse de un árbol, utilizando cables. Este hecho tuvo lugar en calles de la colonia Lomas del Paraíso, en Guadalajara https://t.co/9dG6J9EfAH", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55627, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193785, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131551, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193785, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753711, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }] + }, + "latest_tweet_id": "1688435279059677185", + "headerProps": { + "screenName": "Trafico_ZMG" + } + }, + "__N_SSP": true + }, + "page": "/timeline-profile/screen-name/[screenName]", + "query": { + "screenName": "trafico_zmg" + }, + "buildId": "vn5fUacsNpP-nIkFRlFf6", + "assetPrefix": "https://platform.twitter.com", + "isFallback": false, + "gssp": true, + "customServer": true + } + </script> + <script nomodule="" src="https://platform.twitter.com/_next/static/chunks/polyfills-3b821eda8863adcc4a4b.js"></script> + <script src="https://platform.twitter.com/_next/static/chunks/runtime-2cef2cd3029217be2b2d.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/chunks/modules.20f98d7498a59035a762.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/chunks/main-fd9ef5eb169057cda26d.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/chunks/pages/_app-6ed494f5458c72a92281.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/chunks/pages/timeline-profile/screen-name/%5BscreenName%5D-c33f0b02841cffc3e9b4.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/vn5fUacsNpP-nIkFRlFf6/_buildManifest.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/vn5fUacsNpP-nIkFRlFf6/_ssgManifest.js" async=""></script> + </body> +</html> \ No newline at end of file diff --git a/juunil-crawler/test2.html b/juunil-crawler/test2.html new file mode 100644 index 0000000..13993a0 --- /dev/null +++ b/juunil-crawler/test2.html @@ -0,0 +1,2622 @@ +<!DOCTYPE html> +<html> + <head> + <meta charSet="utf-8" /> + <meta content="width=device-width, initial-scale=1" name="viewport" /> + <meta name="next-head-count" content="2" /> + <noscript data-n-css=""></noscript> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/runtime-2cef2cd3029217be2b2d.js" as="script" /> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/modules.20f98d7498a59035a762.js" as="script" /> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/main-fd9ef5eb169057cda26d.js" as="script" /> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/pages/_app-6ed494f5458c72a92281.js" as="script" /> + <link rel="preload" href="https://platform.twitter.com/_next/static/chunks/pages/timeline-profile/screen-name/%5BscreenName%5D-c33f0b02841cffc3e9b4.js" as="script" /> + </head> + <body> + <div id="__next"></div> + <script id="__NEXT_DATA__" type="application/json"> + { + "props": { + "pageProps": { + "contextProvider": { + "features": {}, + "scribeData": { + "client_version": null, + "dnt": false, + "widget_id": "embed-0", + "widget_origin": "", + "widget_frame": "", + "widget_partner": "", + "widget_site_screen_name": "", + "widget_site_user_id": "", + "widget_creator_screen_name": "", + "widget_creator_user_id": "", + "widget_iframe_version": "bb06567:1687853948269", + "widget_data_source": "screen-name:trafico_zmg", + "session_id": "" + }, + "messengerContext": { + "embedId": "embed-0" + }, + "hasResults": true, + "lang": "en", + "theme": "light" + }, + "lang": "en", + "maxHeight": null, + "showHeader": true, + "hideBorder": false, + "hideFooter": false, + "hideScrollBar": false, + "transparent": false, + "timeline": { + "entries": [{ + "type": "tweet", + "entry_id": "tweet-1688596711202332672", + "sort_index": "1688600845748273151", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688596711202332672", + "created_at": "Mon Aug 07 17:03:23 +0000 2023", + "display_text_range": [0, 155], + "entities": { + "user_mentions": [], + "urls": [], + "hashtags": [{ + "indices": [73, 94], + "text": "TuNoticieroConéctate" + }], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/r0xoYn2bhP", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688596711202332672/photo/1", + "id_str": "1688596678738337792", + "indices": [156, 179], + "media_url_https": "https://pbs.twimg.com/media/F28Zu5UaYAA3VWP.jpg", + "type": "photo", + "url": "https://t.co/r0xoYn2bhP", + "features": { + "large": { + "faces": [{ + "x": 1068, + "y": 95, + "h": 84, + "w": 84 + }] + }, + "medium": { + "faces": [{ + "x": 801, + "y": 71, + "h": 63, + "w": 63 + }] + }, + "small": { + "faces": [{ + "x": 453, + "y": 40, + "h": 35, + "w": 35 + }] + }, + "orig": { + "faces": [{ + "x": 1068, + "y": 95, + "h": 84, + "w": 84 + }] + } + }, + "sizes": { + "large": { + "h": 900, + "w": 1600, + "resize": "fit" + }, + "medium": { + "h": 675, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 383, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 900, + "width": 1600, + "focus_rects": [{ + "x": 0, + "y": 0, + "w": 1600, + "h": 896 + }, { + "x": 310, + "y": 0, + "w": 900, + "h": 900 + }, { + "x": 366, + "y": 0, + "w": 789, + "h": 900 + }, { + "x": 535, + "y": 0, + "w": 450, + "h": 900 + }, { + "x": 0, + "y": 0, + "w": 1600, + "h": 900 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/r0xoYn2bhP", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688596711202332672/photo/1", + "id_str": "1688596678738337792", + "indices": [156, 179], + "media_key": "3_1688596678738337792", + "media_url_https": "https://pbs.twimg.com/media/F28Zu5UaYAA3VWP.jpg", + "type": "photo", + "url": "https://t.co/r0xoYn2bhP", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [{ + "x": 1068, + "y": 95, + "h": 84, + "w": 84 + }] + }, + "medium": { + "faces": [{ + "x": 801, + "y": 71, + "h": 63, + "w": 63 + }] + }, + "small": { + "faces": [{ + "x": 453, + "y": 40, + "h": 35, + "w": 35 + }] + }, + "orig": { + "faces": [{ + "x": 1068, + "y": 95, + "h": 84, + "w": 84 + }] + } + }, + "sizes": { + "large": { + "h": 900, + "w": 1600, + "resize": "fit" + }, + "medium": { + "h": 675, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 383, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 900, + "width": 1600, + "focus_rects": [{ + "x": 0, + "y": 0, + "w": 1600, + "h": 896 + }, { + "x": 310, + "y": 0, + "w": 900, + "h": 900 + }, { + "x": 366, + "y": 0, + "w": 789, + "h": 900 + }, { + "x": 535, + "y": 0, + "w": 450, + "h": 900 + }, { + "x": 0, + "y": 0, + "w": 1600, + "h": 900 + }] + } + }] + }, + "favorite_count": 5, + "favorited": false, + "full_text": "Te presentamos a Lu García, la nueva conductora de la Primera Emisión de #TuNoticieroConéctate con nosotros a las 3:30 pm y entérate de toda la información https://t.co/r0xoYn2bhP", + "id_str": "1688596711202332672", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688596711202332672", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 2, + "retweet_count": 1, + "retweeted": false, + "text": "Te presentamos a Lu García, la nueva conductora de la Primera Emisión de #TuNoticieroConéctate con nosotros a las 3:30 pm y entérate de toda la información https://t.co/r0xoYn2bhP", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688596499083710464", + "sort_index": "1688600845748273150", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688594692932354059", + "created_at": "Mon Aug 07 17:02:32 +0000 2023", + "display_text_range": [0, 78], + "entities": { + "user_mentions": [], + "urls": [], + "hashtags": [{ + "indices": [0, 14], + "text": "Actualización" + }], + "symbols": [], + "media": [] + }, + "favorite_count": 2, + "favorited": false, + "full_text": "#Actualización por el momento sólo hay servicio de la Central a Circunvalación", + "id_str": "1688596499083710464", + "in_reply_to_name": "Trafico_ZMG", + "in_reply_to_screen_name": "Trafico_ZMG", + "in_reply_to_status_id_str": "1688594692932354059", + "in_reply_to_user_id_str": "263809798", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688596499083710464", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 1, + "retweeted": false, + "text": "#Actualización por el momento sólo hay servicio de la Central a Circunvalación", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688596395157078030", + "sort_index": "1688600845748273148", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688596395157078030", + "created_at": "Mon Aug 07 17:02:07 +0000 2023", + "display_text_range": [0, 156], + "entities": { + "user_mentions": [], + "urls": [], + "hashtags": [{ + "indices": [73, 85], + "text": "TuNoticiero" + }], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/IOqp5LgQ3l", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688596395157078030/photo/1", + "id_str": "1688596304434278400", + "indices": [157, 180], + "media_url_https": "https://pbs.twimg.com/media/F28ZZG7XsAAZp1y.jpg", + "type": "photo", + "url": "https://t.co/IOqp5LgQ3l", + "features": { + "large": { + "faces": [{ + "x": 1068, + "y": 95, + "h": 84, + "w": 84 + }] + }, + "medium": { + "faces": [{ + "x": 801, + "y": 71, + "h": 63, + "w": 63 + }] + }, + "small": { + "faces": [{ + "x": 453, + "y": 40, + "h": 35, + "w": 35 + }] + }, + "orig": { + "faces": [{ + "x": 1068, + "y": 95, + "h": 84, + "w": 84 + }] + } + }, + "sizes": { + "large": { + "h": 900, + "w": 1600, + "resize": "fit" + }, + "medium": { + "h": 675, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 383, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 900, + "width": 1600, + "focus_rects": [{ + "x": 0, + "y": 0, + "w": 1600, + "h": 896 + }, { + "x": 310, + "y": 0, + "w": 900, + "h": 900 + }, { + "x": 366, + "y": 0, + "w": 789, + "h": 900 + }, { + "x": 535, + "y": 0, + "w": 450, + "h": 900 + }, { + "x": 0, + "y": 0, + "w": 1600, + "h": 900 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/IOqp5LgQ3l", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688596395157078030/photo/1", + "id_str": "1688596304434278400", + "indices": [157, 180], + "media_key": "3_1688596304434278400", + "media_url_https": "https://pbs.twimg.com/media/F28ZZG7XsAAZp1y.jpg", + "type": "photo", + "url": "https://t.co/IOqp5LgQ3l", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [{ + "x": 1068, + "y": 95, + "h": 84, + "w": 84 + }] + }, + "medium": { + "faces": [{ + "x": 801, + "y": 71, + "h": 63, + "w": 63 + }] + }, + "small": { + "faces": [{ + "x": 453, + "y": 40, + "h": 35, + "w": 35 + }] + }, + "orig": { + "faces": [{ + "x": 1068, + "y": 95, + "h": 84, + "w": 84 + }] + } + }, + "sizes": { + "large": { + "h": 900, + "w": 1600, + "resize": "fit" + }, + "medium": { + "h": 675, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 383, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 900, + "width": 1600, + "focus_rects": [{ + "x": 0, + "y": 0, + "w": 1600, + "h": 896 + }, { + "x": 310, + "y": 0, + "w": 900, + "h": 900 + }, { + "x": 366, + "y": 0, + "w": 789, + "h": 900 + }, { + "x": 535, + "y": 0, + "w": 450, + "h": 900 + }, { + "x": 0, + "y": 0, + "w": 1600, + "h": 900 + }] + } + }] + }, + "favorite_count": 8, + "favorited": false, + "full_text": "Te presentamos a Lu García, la nueva conductora de la Primera Emisión de #TuNoticiero\nConéctate con nosotros a las 3:30 pm y entérate de toda la información https://t.co/IOqp5LgQ3l", + "id_str": "1688596395157078030", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688596395157078030", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 0, + "retweeted": false, + "text": "Te presentamos a Lu García, la nueva conductora de la Primera Emisión de #TuNoticiero\nConéctate con nosotros a las 3:30 pm y entérate de toda la información https://t.co/IOqp5LgQ3l", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688594692932354059", + "sort_index": "1688600845748273147", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688594692932354059", + "created_at": "Mon Aug 07 16:55:22 +0000 2023", + "display_text_range": [0, 168], + "entities": { + "user_mentions": [], + "urls": [], + "hashtags": [{ + "indices": [0, 11], + "text": "Preliminar" + }, { + "indices": [155, 166], + "text": "ReporteZMG" + }], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/frs1qPMjKY", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688594692932354059/photo/1", + "id_str": "1688594686527553536", + "indices": [167, 190], + "media_url_https": "https://pbs.twimg.com/media/F28X67wWQAA8C3f.jpg", + "type": "photo", + "url": "https://t.co/frs1qPMjKY", + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 900, + "w": 1600, + "resize": "fit" + }, + "medium": { + "h": 675, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 383, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 900, + "width": 1600, + "focus_rects": [{ + "x": 0, + "y": 0, + "w": 1600, + "h": 896 + }, { + "x": 350, + "y": 0, + "w": 900, + "h": 900 + }, { + "x": 406, + "y": 0, + "w": 789, + "h": 900 + }, { + "x": 575, + "y": 0, + "w": 450, + "h": 900 + }, { + "x": 0, + "y": 0, + "w": 1600, + "h": 900 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/frs1qPMjKY", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688594692932354059/photo/1", + "id_str": "1688594686527553536", + "indices": [167, 190], + "media_key": "3_1688594686527553536", + "media_url_https": "https://pbs.twimg.com/media/F28X67wWQAA8C3f.jpg", + "type": "photo", + "url": "https://t.co/frs1qPMjKY", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 900, + "w": 1600, + "resize": "fit" + }, + "medium": { + "h": 675, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 383, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 900, + "width": 1600, + "focus_rects": [{ + "x": 0, + "y": 0, + "w": 1600, + "h": 896 + }, { + "x": 350, + "y": 0, + "w": 900, + "h": 900 + }, { + "x": 406, + "y": 0, + "w": 789, + "h": 900 + }, { + "x": 575, + "y": 0, + "w": 450, + "h": 900 + }, { + "x": 0, + "y": 0, + "w": 1600, + "h": 900 + }] + } + }] + }, + "favorite_count": 18, + "favorited": false, + "full_text": "#Preliminar no hay abordaje en la estación La Normal de la Línea 3 del Tren Ligero.\nSe desconocen las causas, ¿Hay más estaciones cerradas? Repórtalas 👇🚈\n\n#ReporteZMG https://t.co/frs1qPMjKY", + "id_str": "1688594692932354059", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688594692932354059", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 13, + "retweet_count": 6, + "retweeted": false, + "text": "#Preliminar no hay abordaje en la estación La Normal de la Línea 3 del Tren Ligero.\nSe desconocen las causas, ¿Hay más estaciones cerradas? Repórtalas 👇🚈\n\n#ReporteZMG https://t.co/frs1qPMjKY", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688590066585681929", + "sort_index": "1688600845748273146", + "content": { + "tweet": { + "id": 0, + "location": "", + "card": { + "name": "summary_large_image", + "url": "https://t.co/6I7cRevVQw", + "card_type_url": "http://card-type-url-is-deprecated.invalid", + "binding_values": { + "photo_image_full_size_large": { + "image_value": { + "height": 335, + "width": 640, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=800x419" + }, + "type": "IMAGE" + }, + "thumbnail_image": { + "image_value": { + "height": 150, + "width": 225, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=280x150" + }, + "type": "IMAGE" + }, + "description": { + "string_value": "Jalisco iniciará el ciclo escolar con o sin libros de texto gratuito, así lo indicó el gobernador jalisciense, Enrique Alfaro Ramírez al posicionarse tras la polémica que ha envuelto a los libros de...", + "type": "STRING" + }, + "domain": { + "string_value": "traficozmg.com", + "type": "STRING" + }, + "thumbnail_image_large": { + "image_value": { + "height": 320, + "width": 480, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=800x320_1" + }, + "type": "IMAGE" + }, + "summary_photo_image_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=386x202" + }, + "type": "IMAGE" + }, + "thumbnail_image_original": { + "image_value": { + "height": 427, + "width": 640, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + }, + "site": { + "scribe_key": "publisher_id", + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "photo_image_full_size_small": { + "image_value": { + "height": 202, + "width": 386, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=386x202" + }, + "type": "IMAGE" + }, + "summary_photo_image_large": { + "image_value": { + "height": 335, + "width": 640, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=800x419" + }, + "type": "IMAGE" + }, + "thumbnail_image_small": { + "image_value": { + "height": 67, + "width": 100, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=100x100" + }, + "type": "IMAGE" + }, + "creator": { + "type": "USER", + "user_value": { + "id_str": "263809798", + "path": [] + } + }, + "thumbnail_image_x_large": { + "image_value": { + "height": 427, + "width": 640, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "photo_image_full_size_original": { + "image_value": { + "height": 427, + "width": 640, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + }, + "vanity_url": { + "scribe_key": "vanity_url", + "string_value": "traficozmg.com", + "type": "STRING" + }, + "photo_image_full_size": { + "image_value": { + "height": 314, + "width": 600, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=600x314" + }, + "type": "IMAGE" + }, + "thumbnail_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 138, + "green": 157, + "red": 165 + }, + "percentage": 18.73 + }, { + "rgb": { + "blue": 62, + "green": 79, + "red": 98 + }, + "percentage": 11.99 + }, { + "rgb": { + "blue": 91, + "green": 38, + "red": 199 + }, + "percentage": 7.73 + }, { + "rgb": { + "blue": 101, + "green": 43, + "red": 5 + }, + "percentage": 5.35 + }, { + "rgb": { + "blue": 52, + "green": 158, + "red": 100 + }, + "percentage": 3.41 + }] + }, + "type": "IMAGE_COLOR" + }, + "title": { + "string_value": "Con o sin libros Jalisco iniciará ciclo escolar: Alfaro - Tráfico ZMG", + "type": "STRING" + }, + "summary_photo_image_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 138, + "green": 157, + "red": 165 + }, + "percentage": 18.73 + }, { + "rgb": { + "blue": 62, + "green": 79, + "red": 98 + }, + "percentage": 11.99 + }, { + "rgb": { + "blue": 91, + "green": 38, + "red": 199 + }, + "percentage": 7.73 + }, { + "rgb": { + "blue": 101, + "green": 43, + "red": 5 + }, + "percentage": 5.35 + }, { + "rgb": { + "blue": 52, + "green": 158, + "red": 100 + }, + "percentage": 3.41 + }] + }, + "type": "IMAGE_COLOR" + }, + "summary_photo_image_x_large": { + "image_value": { + "height": 427, + "width": 640, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "summary_photo_image": { + "image_value": { + "height": 314, + "width": 600, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=600x314" + }, + "type": "IMAGE" + }, + "photo_image_full_size_color": { + "image_color_value": { + "palette": [{ + "rgb": { + "blue": 138, + "green": 157, + "red": 165 + }, + "percentage": 18.73 + }, { + "rgb": { + "blue": 62, + "green": 79, + "red": 98 + }, + "percentage": 11.99 + }, { + "rgb": { + "blue": 91, + "green": 38, + "red": 199 + }, + "percentage": 7.73 + }, { + "rgb": { + "blue": 101, + "green": 43, + "red": 5 + }, + "percentage": 5.35 + }, { + "rgb": { + "blue": 52, + "green": 158, + "red": 100 + }, + "percentage": 3.41 + }] + }, + "type": "IMAGE_COLOR" + }, + "photo_image_full_size_x_large": { + "image_value": { + "height": 427, + "width": 640, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=png\u0026name=2048x2048_2_exp" + }, + "type": "IMAGE" + }, + "card_url": { + "scribe_key": "card_url", + "string_value": "https://t.co/6I7cRevVQw", + "type": "STRING" + }, + "summary_photo_image_original": { + "image_value": { + "height": 427, + "width": 640, + "url": "https://pbs.twimg.com/card_img/1688589981877518356/O90rpxWX?format=jpg\u0026name=orig" + }, + "type": "IMAGE" + } + }, + "users": {} + }, + "conversation_id_str": "1688590066585681929", + "created_at": "Mon Aug 07 16:36:59 +0000 2023", + "display_text_range": [0, 184], + "entities": { + "user_mentions": [], + "urls": [{ + "display_url": "traficozmg.com/2023/08/con-o-…", + "expanded_url": "https://traficozmg.com/2023/08/con-o-sin-libros-jalisco-iniciara-ciclo-escolar-alfaro/", + "url": "https://t.co/6I7cRevVQw", + "indices": [161, 184] + }], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 2, + "favorited": false, + "full_text": "Jalisco iniciará el ciclo escolar con o sin libros de texto gratuito, así lo indicó Enrique Alfaro al posicionarse tras la polémica que ha envuelto a los libros\nhttps://t.co/6I7cRevVQw", + "id_str": "1688590066585681929", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688590066585681929", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 0, + "retweeted": false, + "text": "Jalisco iniciará el ciclo escolar con o sin libros de texto gratuito, así lo indicó Enrique Alfaro al posicionarse tras la polémica que ha envuelto a los libros\nhttps://t.co/6I7cRevVQw", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688588742863548417", + "sort_index": "1688600845748273145", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688588742863548417", + "created_at": "Mon Aug 07 16:31:43 +0000 2023", + "display_text_range": [0, 233], + "entities": { + "user_mentions": [{ + "id_str": "81437068", + "name": "Gobierno de Guadalajara", + "screen_name": "GuadalajaraGob", + "indices": [180, 195] + }], + "urls": [], + "hashtags": [{ + "indices": [222, 233], + "text": "ReporteZMG" + }], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/ypWloOQHlA", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688588742863548417/photo/1", + "id_str": "1688588650328862720", + "indices": [234, 257], + "media_url_https": "https://pbs.twimg.com/media/F28SblKbsAAKe6n.jpg", + "type": "photo", + "url": "https://t.co/ypWloOQHlA", + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 373, + "w": 280, + "resize": "fit" + }, + "medium": { + "h": 373, + "w": 280, + "resize": "fit" + }, + "small": { + "h": 373, + "w": 280, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 373, + "width": 280, + "focus_rects": [{ + "x": 0, + "y": 43, + "w": 280, + "h": 157 + }, { + "x": 0, + "y": 0, + "w": 280, + "h": 280 + }, { + "x": 0, + "y": 0, + "w": 280, + "h": 319 + }, { + "x": 93, + "y": 0, + "w": 187, + "h": 373 + }, { + "x": 0, + "y": 0, + "w": 280, + "h": 373 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/ypWloOQHlA", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688588742863548417/photo/1", + "id_str": "1688588650328862720", + "indices": [234, 257], + "media_key": "3_1688588650328862720", + "media_url_https": "https://pbs.twimg.com/media/F28SblKbsAAKe6n.jpg", + "type": "photo", + "url": "https://t.co/ypWloOQHlA", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 373, + "w": 280, + "resize": "fit" + }, + "medium": { + "h": 373, + "w": 280, + "resize": "fit" + }, + "small": { + "h": 373, + "w": 280, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 373, + "width": 280, + "focus_rects": [{ + "x": 0, + "y": 43, + "w": 280, + "h": 157 + }, { + "x": 0, + "y": 0, + "w": 280, + "h": 280 + }, { + "x": 0, + "y": 0, + "w": 280, + "h": 319 + }, { + "x": 93, + "y": 0, + "w": 187, + "h": 373 + }, { + "x": 0, + "y": 0, + "w": 280, + "h": 373 + }] + } + }] + }, + "favorite_count": 6, + "favorited": false, + "full_text": "Acumulamiento de basura sobre la calle Álvarez del Castillo, en la colonia Santa María de Guadalajara. Vecinos reportan que el personal cobra por llevarse la basura.\nSolicitamos a @GuadalajaraGob su atención en el reporte\n#ReporteZMG https://t.co/ypWloOQHlA", + "id_str": "1688588742863548417", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688588742863548417", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 1, + "retweet_count": 6, + "retweeted": false, + "text": "Acumulamiento de basura sobre la calle Álvarez del Castillo, en la colonia Santa María de Guadalajara. Vecinos reportan que el personal cobra por llevarse la basura.\nSolicitamos a @GuadalajaraGob su atención en el reporte\n#ReporteZMG https://t.co/ypWloOQHlA", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688584526505594880", + "sort_index": "1688600845748273144", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688584526505594880", + "created_at": "Mon Aug 07 16:14:58 +0000 2023", + "display_text_range": [0, 208], + "entities": { + "user_mentions": [{ + "id_str": "382811534", + "name": "Siapagdl", + "screen_name": "siapagdl", + "indices": [161, 170] + }], + "urls": [], + "hashtags": [{ + "indices": [197, 208], + "text": "ReporteZMG" + }], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/adsrwVVu6r", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688584526505594880/video/1", + "id_str": "1688584393399398400", + "indices": [209, 232], + "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1688584393399398400/pu/img/ZrEwXsR_9YRbniUm.jpg", + "type": "photo", + "url": "https://t.co/adsrwVVu6r", + "features": {}, + "sizes": { + "large": { + "h": 368, + "w": 640, + "resize": "fit" + }, + "medium": { + "h": 368, + "w": 640, + "resize": "fit" + }, + "small": { + "h": 368, + "w": 640, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 368, + "width": 640 + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/adsrwVVu6r", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688584526505594880/video/1", + "id_str": "1688584393399398400", + "indices": [209, 232], + "media_key": "7_1688584393399398400", + "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1688584393399398400/pu/img/ZrEwXsR_9YRbniUm.jpg", + "type": "video", + "url": "https://t.co/adsrwVVu6r", + "additional_media_info": { + "monetizable": false + }, + "mediaStats": { + "viewCount": 906 + }, + "ext_media_availability": { + "status": "Available" + }, + "features": {}, + "sizes": { + "large": { + "h": 368, + "w": 640, + "resize": "fit" + }, + "medium": { + "h": 368, + "w": 640, + "resize": "fit" + }, + "small": { + "h": 368, + "w": 640, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 368, + "width": 640 + }, + "video_info": { + "aspect_ratio": [40, 23], + "duration_millis": 41002, + "variants": [{ + "bitrate": 256000, + "content_type": "video/mp4", + "url": "https://video.twimg.com/ext_tw_video/1688584393399398400/pu/vid/468x270/HqonAIIjSQWth2PB.mp4?tag=12" + }, { + "bitrate": 832000, + "content_type": "video/mp4", + "url": "https://video.twimg.com/ext_tw_video/1688584393399398400/pu/vid/640x368/pByvDwpF7Zp36Je8.mp4?tag=12" + }, { + "content_type": "application/x-mpegURL", + "url": "https://video.twimg.com/ext_tw_video/1688584393399398400/pu/pl/It37ZsAm4NodJzaN.m3u8?tag=12\u0026container=fmp4" + }] + } + }] + }, + "favorite_count": 2, + "favorited": false, + "full_text": "De nueva cuenta, surge socavón sobre Juan Aguirre Benavides, entre Venustiano Carranza y Rafael Vega Sánchez, en la colonia Santa Paula de Zapopan\nSolicitamos a @Siapagdl su atención en el reporte\n#ReporteZMG https://t.co/adsrwVVu6r", + "id_str": "1688584526505594880", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688584526505594880", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 1, + "retweet_count": 0, + "retweeted": false, + "text": "De nueva cuenta, surge socavón sobre Juan Aguirre Benavides, entre Venustiano Carranza y Rafael Vega Sánchez, en la colonia Santa Paula de Zapopan\nSolicitamos a @Siapagdl su atención en el reporte\n#ReporteZMG https://t.co/adsrwVVu6r", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688583351525953536", + "sort_index": "1688600845748273143", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688583351525953536", + "created_at": "Mon Aug 07 16:10:18 +0000 2023", + "display_text_range": [0, 89], + "entities": { + "user_mentions": [], + "urls": [], + "hashtags": [{ + "indices": [78, 89], + "text": "ReporteZMG" + }], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/5tgPHQvvvG", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688583351525953536/photo/1", + "id_str": "1688583346807320576", + "indices": [90, 113], + "media_url_https": "https://pbs.twimg.com/media/F28Nm4AXMAAWGxo.jpg", + "type": "photo", + "url": "https://t.co/5tgPHQvvvG", + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 950, + "w": 1280, + "resize": "fit" + }, + "medium": { + "h": 891, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 505, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 950, + "width": 1280, + "focus_rects": [{ + "x": 0, + "y": 120, + "w": 1280, + "h": 717 + }, { + "x": 259, + "y": 0, + "w": 950, + "h": 950 + }, { + "x": 318, + "y": 0, + "w": 833, + "h": 950 + }, { + "x": 497, + "y": 0, + "w": 475, + "h": 950 + }, { + "x": 0, + "y": 0, + "w": 1280, + "h": 950 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/5tgPHQvvvG", + "expanded_url": "https://twitter.com/Trafico_ZMG/status/1688583351525953536/photo/1", + "id_str": "1688583346807320576", + "indices": [90, 113], + "media_key": "3_1688583346807320576", + "media_url_https": "https://pbs.twimg.com/media/F28Nm4AXMAAWGxo.jpg", + "type": "photo", + "url": "https://t.co/5tgPHQvvvG", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 950, + "w": 1280, + "resize": "fit" + }, + "medium": { + "h": 891, + "w": 1200, + "resize": "fit" + }, + "small": { + "h": 505, + "w": 680, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 950, + "width": 1280, + "focus_rects": [{ + "x": 0, + "y": 120, + "w": 1280, + "h": 717 + }, { + "x": 259, + "y": 0, + "w": 950, + "h": 950 + }, { + "x": 318, + "y": 0, + "w": 833, + "h": 950 + }, { + "x": 497, + "y": 0, + "w": 475, + "h": 950 + }, { + "x": 0, + "y": 0, + "w": 1280, + "h": 950 + }] + } + }] + }, + "favorite_count": 5, + "favorited": false, + "full_text": "Precaución⚠️\nChoque sobre López de Legaspi y Calle 16, en la Zona Industrial\n\n#ReporteZMG https://t.co/5tgPHQvvvG", + "id_str": "1688583351525953536", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688583351525953536", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 1, + "retweeted": false, + "text": "Precaución⚠️\nChoque sobre López de Legaspi y Calle 16, en la Zona Industrial\n\n#ReporteZMG https://t.co/5tgPHQvvvG", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688581671174787072", + "sort_index": "1688600845748273142", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688581671174787072", + "created_at": "Mon Aug 07 16:03:37 +0000 2023", + "display_text_range": [0, 142], + "entities": { + "user_mentions": [{ + "id_str": "196894013", + "name": "Eduardo", + "screen_name": "lalas77", + "indices": [3, 11] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [13, 25] + }, { + "id_str": "1166555934518329355", + "name": "AMIM", + "screen_name": "AgenciaAMIM", + "indices": [26, 38] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @lalas77: @Trafico_ZMG @AgenciaAMIM Una pesadilla circular Circ. Agustín Yáñez a partir de La Minerva Semáforos🚦alto 🛑 aquí siga adelant…", + "id_str": "1688581671174787072", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688581671174787072", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 1, + "retweeted": false, + "text": "RT @lalas77: @Trafico_ZMG @AgenciaAMIM Una pesadilla circular Circ. Agustín Yáñez a partir de La Minerva Semáforos🚦alto 🛑 aquí siga adelant…", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "conversation_id_str": "1688581449534808064", + "created_at": "Mon Aug 07 16:02:44 +0000 2023", + "display_text_range": [0, 173], + "entities": { + "user_mentions": [{ + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [0, 12] + }, { + "id_str": "1166555934518329355", + "name": "AMIM", + "screen_name": "AgenciaAMIM", + "indices": [13, 25] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 3, + "favorited": false, + "full_text": "@Trafico_ZMG @AgenciaAMIM Una pesadilla circular Circ. Agustín Yáñez a partir de La Minerva Semáforos🚦alto 🛑 aquí siga adelante! Los invito a circular para que entiendan..", + "id_str": "1688581449534808064", + "in_reply_to_name": "Trafico_ZMG", + "in_reply_to_screen_name": "Trafico_ZMG", + "in_reply_to_user_id_str": "263809798", + "lang": "es", + "permalink": "/lalas77/status/1688581449534808064", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 1, + "retweeted": false, + "text": "@Trafico_ZMG @AgenciaAMIM Una pesadilla circular Circ. Agustín Yáñez a partir de La Minerva Semáforos🚦alto 🛑 aquí siga adelante! Los invito a circular para que entiendan..", + "user": { + "blocking": false, + "created_at": "Thu Sep 30 04:17:16 +0000 2010", + "default_profile": true, + "default_profile_image": false, + "description": "Dios es mi Pastor y con él nada me faltará.", + "entities": { + "description": { + "urls": [] + }, + "url": {} + }, + "fast_followers_count": 0, + "favourites_count": 24748, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 333, + "following": false, + "friends_count": 539, + "has_custom_timelines": false, + "id": 0, + "id_str": "196894013", + "is_translator": false, + "listed_count": 7, + "location": "Ubicadisimo", + "media_count": 953, + "name": "Eduardo", + "normal_followers_count": 333, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/196894013/1519483207", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1491984803004141577/RhYFCJ0H_normal.jpg", + "protected": false, + "screen_name": "lalas77", + "show_all_inline_media": false, + "statuses_count": 15365, + "time_zone": "", + "translator_type": "none", + "url": "", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": false + } + } + } + } + }, { + "type": "tweet", + "entry_id": "tweet-1688575864680964096", + "sort_index": "1688600845748273141", + "content": { + "tweet": { + "id": 0, + "location": "", + "conversation_id_str": "1688575864680964096", + "created_at": "Mon Aug 07 15:40:33 +0000 2023", + "display_text_range": [0, 140], + "entities": { + "user_mentions": [{ + "id_str": "27910993", + "name": "Zuleira Hijar", + "screen_name": "zulegdl", + "indices": [3, 11] + }, { + "id_str": "1166555934518329355", + "name": "AMIM", + "screen_name": "AgenciaAMIM", + "indices": [96, 108] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [109, 121] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [] + }, + "favorite_count": 0, + "favorited": false, + "full_text": "RT @zulegdl: El problema de cada semana en corredor de Av. Juárez. Semáforos mal sincronizados. @AgenciaAMIM @Trafico_ZMG https://t.co/MGLR…", + "id_str": "1688575864680964096", + "lang": "es", + "permalink": "/Trafico_ZMG/status/1688575864680964096", + "possibly_sensitive": false, + "quote_count": 0, + "reply_count": 0, + "retweet_count": 1, + "retweeted": false, + "text": "RT @zulegdl: El problema de cada semana en corredor de Av. Juárez. Semáforos mal sincronizados. @AgenciaAMIM @Trafico_ZMG https://t.co/MGLR…", + "user": { + "blocking": false, + "created_at": "Thu Mar 10 19:48:34 +0000 2011", + "default_profile": false, + "default_profile_image": false, + "description": "Medio de comunicación de Periodismo Ciudadano. Reporte al momento, noticias y debate #Movilidad #Seguridad #ReporteVial #Política #Noticias #GDL", + "entities": { + "description": { + "urls": [] + }, + "url": { + "urls": [{ + "display_url": "traficozmg.com", + "expanded_url": "http://traficozmg.com", + "url": "https://t.co/EgpiKVgToL", + "indices": [0, 23] + }] + } + }, + "fast_followers_count": 0, + "favourites_count": 55625, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 1193926, + "following": true, + "friends_count": 411, + "has_custom_timelines": false, + "id": 0, + "id_str": "263809798", + "is_translator": false, + "listed_count": 1672, + "location": "Guadalajara, México", + "media_count": 131560, + "name": "TráficoZMGuadalajara", + "normal_followers_count": 1193926, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/263809798/1678428550", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1661267287477743617/uvl5FUfV_normal.jpg", + "protected": false, + "screen_name": "Trafico_ZMG", + "show_all_inline_media": false, + "statuses_count": 753744, + "time_zone": "", + "translator_type": "none", + "url": "https://t.co/EgpiKVgToL", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": true + }, + "retweeted_status": { + "id": 0, + "location": "", + "conversation_id_str": "1688575746128965632", + "created_at": "Mon Aug 07 15:40:04 +0000 2023", + "display_text_range": [0, 108], + "entities": { + "user_mentions": [{ + "id_str": "1166555934518329355", + "name": "AMIM", + "screen_name": "AgenciaAMIM", + "indices": [83, 95] + }, { + "id_str": "263809798", + "name": "TráficoZMGuadalajara", + "screen_name": "Trafico_ZMG", + "indices": [96, 108] + }], + "urls": [], + "hashtags": [], + "symbols": [], + "media": [{ + "display_url": "pic.twitter.com/MGLRm1uTN1", + "expanded_url": "https://twitter.com/zulegdl/status/1688575746128965632/photo/1", + "id_str": "1688575739430658048", + "indices": [109, 132], + "media_url_https": "https://pbs.twimg.com/media/F28GsEUbYAAXLRb.jpg", + "type": "photo", + "url": "https://t.co/MGLRm1uTN1", + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 1536, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 900, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 510, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 1536, + "focus_rects": [{ + "x": 0, + "y": 747, + "w": 1536, + "h": 860 + }, { + "x": 0, + "y": 409, + "w": 1536, + "h": 1536 + }, { + "x": 0, + "y": 297, + "w": 1536, + "h": 1751 + }, { + "x": 0, + "y": 0, + "w": 1024, + "h": 2048 + }, { + "x": 0, + "y": 0, + "w": 1536, + "h": 2048 + }] + } + }] + }, + "extended_entities": { + "media": [{ + "display_url": "pic.twitter.com/MGLRm1uTN1", + "expanded_url": "https://twitter.com/zulegdl/status/1688575746128965632/photo/1", + "id_str": "1688575739430658048", + "indices": [109, 132], + "media_key": "3_1688575739430658048", + "media_url_https": "https://pbs.twimg.com/media/F28GsEUbYAAXLRb.jpg", + "type": "photo", + "url": "https://t.co/MGLRm1uTN1", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 1536, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 900, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 510, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 1536, + "focus_rects": [{ + "x": 0, + "y": 747, + "w": 1536, + "h": 860 + }, { + "x": 0, + "y": 409, + "w": 1536, + "h": 1536 + }, { + "x": 0, + "y": 297, + "w": 1536, + "h": 1751 + }, { + "x": 0, + "y": 0, + "w": 1024, + "h": 2048 + }, { + "x": 0, + "y": 0, + "w": 1536, + "h": 2048 + }] + } + }, { + "display_url": "pic.twitter.com/MGLRm1uTN1", + "expanded_url": "https://twitter.com/zulegdl/status/1688575746128965632/photo/1", + "id_str": "1688575739430567936", + "indices": [109, 132], + "media_key": "3_1688575739430567936", + "media_url_https": "https://pbs.twimg.com/media/F28GsEUaAAAHBpa.jpg", + "type": "photo", + "url": "https://t.co/MGLRm1uTN1", + "ext_media_availability": { + "status": "Available" + }, + "features": { + "large": { + "faces": [] + }, + "medium": { + "faces": [] + }, + "small": { + "faces": [] + }, + "orig": { + "faces": [] + } + }, + "sizes": { + "large": { + "h": 2048, + "w": 1536, + "resize": "fit" + }, + "medium": { + "h": 1200, + "w": 900, + "resize": "fit" + }, + "small": { + "h": 680, + "w": 510, + "resize": "fit" + }, + "thumb": { + "h": 150, + "w": 150, + "resize": "crop" + } + }, + "original_info": { + "height": 2048, + "width": 1536, + "focus_rects": [{ + "x": 0, + "y": 542, + "w": 1536, + "h": 860 + }, { + "x": 0, + "y": 204, + "w": 1536, + "h": 1536 + }, { + "x": 0, + "y": 97, + "w": 1536, + "h": 1751 + }, { + "x": 0, + "y": 0, + "w": 1024, + "h": 2048 + }, { + "x": 0, + "y": 0, + "w": 1536, + "h": 2048 + }] + } + }] + }, + "favorite_count": 6, + "favorited": false, + "full_text": "El problema de cada semana en corredor de Av. Juárez. Semáforos mal sincronizados. @AgenciaAMIM @Trafico_ZMG https://t.co/MGLRm1uTN1", + "id_str": "1688575746128965632", + "lang": "es", + "permalink": "/zulegdl/status/1688575746128965632", + "possibly_sensitive": false, + "quote_count": 2, + "reply_count": 1, + "retweet_count": 1, + "retweeted": false, + "text": "El problema de cada semana en corredor de Av. Juárez. Semáforos mal sincronizados. @AgenciaAMIM @Trafico_ZMG https://t.co/MGLRm1uTN1", + "user": { + "blocking": false, + "created_at": "Tue Mar 31 16:57:06 +0000 2009", + "default_profile": false, + "default_profile_image": false, + "description": "", + "entities": { + "description": { + "urls": [] + }, + "url": {} + }, + "fast_followers_count": 0, + "favourites_count": 2521, + "follow_request_sent": false, + "followed_by": false, + "followers_count": 45, + "following": false, + "friends_count": 177, + "has_custom_timelines": false, + "id": 0, + "id_str": "27910993", + "is_translator": false, + "listed_count": 1, + "location": "Guadalajara", + "media_count": 87, + "name": "Zuleira Hijar", + "normal_followers_count": 45, + "notifications": false, + "profile_banner_url": "https://pbs.twimg.com/profile_banners/27910993/1460007719", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/562059757356187648/4wvGzbga_normal.jpeg", + "protected": false, + "screen_name": "zulegdl", + "show_all_inline_media": false, + "statuses_count": 1851, + "time_zone": "", + "translator_type": "none", + "url": "", + "utc_offset": 0, + "verified": false, + "withheld_in_countries": [], + "withheld_scope": "", + "is_blue_verified": false + } + } + } + } + }] + }, + "latest_tweet_id": "1688596711202332672", + "headerProps": { + "screenName": "Trafico_ZMG" + } + }, + "__N_SSP": true + }, + "page": "/timeline-profile/screen-name/[screenName]", + "query": { + "screenName": "trafico_zmg" + }, + "buildId": "vn5fUacsNpP-nIkFRlFf6", + "assetPrefix": "https://platform.twitter.com", + "isFallback": false, + "gssp": true, + "customServer": true + } + </script> + <script nomodule="" src="https://platform.twitter.com/_next/static/chunks/polyfills-3b821eda8863adcc4a4b.js"></script> + <script src="https://platform.twitter.com/_next/static/chunks/runtime-2cef2cd3029217be2b2d.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/chunks/modules.20f98d7498a59035a762.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/chunks/main-fd9ef5eb169057cda26d.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/chunks/pages/_app-6ed494f5458c72a92281.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/chunks/pages/timeline-profile/screen-name/%5BscreenName%5D-c33f0b02841cffc3e9b4.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/vn5fUacsNpP-nIkFRlFf6/_buildManifest.js" async=""></script> + <script src="https://platform.twitter.com/_next/static/vn5fUacsNpP-nIkFRlFf6/_ssgManifest.js" async=""></script> + </body> +</html> \ No newline at end of file diff --git a/juunil-server/Cargo.toml b/juunil-server/Cargo.toml new file mode 100644 index 0000000..af0b6b9 --- /dev/null +++ b/juunil-server/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "juunil-server" +version = "0.1.0" +edition = "2021" + +[dependencies] +juunil = { path = "../" } +chrono = { version = "0.4.26", features = ["serde"] } +dotenv = "0.15.0" +rocket = { version = "=0.5.0-rc.3", features = ["json"] } +serde = "1.0.164" +serde_json = "1.0.99" diff --git a/juunil-server/src/main.rs b/juunil-server/src/main.rs new file mode 100644 index 0000000..8b1e45e --- /dev/null +++ b/juunil-server/src/main.rs @@ -0,0 +1,27 @@ +#[macro_use] +extern crate rocket; + +use dotenv::dotenv; +use juunil::controllers::posts; +use juunil::models::PostWithMedia; +use rocket::serde::json::Json; +use serde::Serialize; + +#[derive(Serialize)] +struct Posts { + posts: Vec<PostWithMedia>, +} + +#[get("/")] +fn index() -> Json<Posts> { + let posts = posts::get_all_posts_with_media(); + + Json(Posts { posts }) +} + +#[launch] +fn rocket() -> _ { + dotenv().ok(); + + rocket::build().mount("/", routes![index]) +} diff --git a/migrations/2023-08-07-063249_create_posts/down.sql b/migrations/2023-08-07-063249_create_posts/down.sql index 90de6dd..e682395 100644 --- a/migrations/2023-08-07-063249_create_posts/down.sql +++ b/migrations/2023-08-07-063249_create_posts/down.sql @@ -1,2 +1,3 @@ DROP TABLE image; +DROP TABLE video; DROP TABLE post; diff --git a/migrations/2023-08-07-063249_create_posts/up.sql b/migrations/2023-08-07-063249_create_posts/up.sql index cb22c6e..cc0187b 100644 --- a/migrations/2023-08-07-063249_create_posts/up.sql +++ b/migrations/2023-08-07-063249_create_posts/up.sql @@ -11,3 +11,10 @@ CREATE TABLE image ( url TEXT NOT NULL, FOREIGN KEY (post_id) REFERENCES post(id) ); + +CREATE TABLE video ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + post_id BIGINT NOT NULL, + url TEXT NOT NULL, + FOREIGN KEY (post_id) REFERENCES post(id) +); diff --git a/src/controllers.rs b/src/controllers.rs new file mode 100644 index 0000000..629241c --- /dev/null +++ b/src/controllers.rs @@ -0,0 +1,171 @@ +use chrono::prelude::Utc; +use chrono::NaiveDateTime; +use diesel::sqlite::SqliteConnection; +use diesel::Connection; +use diesel::ExpressionMethods; +use diesel::QueryDsl; +use diesel::RunQueryDsl; +use diesel::SelectableHelper; + +use std::env; + +pub fn establish_connection() -> SqliteConnection { + let database_url = env::var("DATABASE_URL").expect("DATABASE_URL env var not seted"); + + SqliteConnection::establish(&database_url) + .expect(&format!("Error connecting to {}", database_url)) +} + +pub mod posts { + use crate::controllers::*; + use crate::models::{Post, PostWithMedia}; + use crate::schema::post; + + pub fn add_post(post_id: i64, description: String, posted_date: NaiveDateTime) { + let mut conn = establish_connection(); + + let crawled_date = Utc::now().naive_utc(); + + let new_post = Post { + id: post_id, + description, + posted_date, + crawled_date, + }; + + diesel::insert_into(post::table) + .values(&new_post) + .execute(&mut conn) + .expect("Error adding the post"); + } + + pub fn get_post(post_id: i64) -> Post { + use crate::schema::post::dsl::*; + + let mut conn = establish_connection(); + + post.find(post_id) + .first(&mut conn) + .expect("Error getting the post") + } + + pub fn get_post_with_media(post_id: i64) -> PostWithMedia { + let images = images::get_images_strings(post_id); + let videos = videos::get_videos_strings(post_id); + let post = get_post(post_id); + + PostWithMedia { + id: post.id, + description: post.description, + posted_date: post.posted_date, + crawled_date: post.crawled_date, + images, + videos, + } + } + + pub fn get_all_posts_with_media() -> Vec<PostWithMedia> { + use crate::schema::post::dsl::*; + + let mut conn = establish_connection(); + + let posts = post + .order(crawled_date.asc()) + .load(&mut conn) + .expect("Error getting the posts"); + + let mut output = vec![]; + + for post_without_media in posts { + let mut new_post = PostWithMedia::from_post(&post_without_media); + let images = images::get_images_strings(new_post.id); + let videos = videos::get_videos_strings(new_post.id); + new_post.images = images; + new_post.videos = videos; + output.push(new_post); + } + output + } +} + +pub mod images { + use crate::controllers::*; + use crate::models::{Image, NewImage}; + use crate::schema::image; + + pub fn add_image(post_id: i64, url: String) { + let mut conn = establish_connection(); + + let new_image = NewImage { post_id, url }; + + diesel::insert_into(image::table) + .values(&new_image) + .execute(&mut conn) + .expect("Error adding the image"); + } + + pub fn add_images(post_id: i64, urls: Vec<String>) { + for url in urls { + add_image(post_id, url); + } + } + + pub fn get_images(post: i64) -> Vec<Image> { + use crate::schema::image::dsl::*; + let mut conn = establish_connection(); + + image + .filter(post_id.eq(post)) + .select(Image::as_select()) + .load(&mut conn) + .expect("Error getting the images") + } + + pub fn get_images_strings(post: i64) -> Vec<String> { + get_images(post) + .iter() + .map(|image| image.url.clone()) + .collect::<Vec<String>>() + } +} + +pub mod videos { + use crate::controllers::*; + use crate::models::{NewVideo, Video}; + use crate::schema::video; + + pub fn add_video(post_id: i64, url: String) { + let mut conn = establish_connection(); + + let new_video = NewVideo { post_id, url }; + + diesel::insert_into(video::table) + .values(&new_video) + .execute(&mut conn) + .expect("Error adding the video"); + } + + pub fn add_videos(post_id: i64, urls: Vec<String>) { + for url in urls { + add_video(post_id, url); + } + } + + pub fn get_videos(post: i64) -> Vec<Video> { + use crate::schema::video::dsl::*; + let mut conn = establish_connection(); + + video + .filter(post_id.eq(post)) + .select(Video::as_select()) + .load(&mut conn) + .expect("Error getting the videos") + } + + pub fn get_videos_strings(post: i64) -> Vec<String> { + get_videos(post) + .iter() + .map(|video| video.url.clone()) + .collect::<Vec<String>>() + } +} diff --git a/src/models.rs b/src/models.rs new file mode 100644 index 0000000..4796b67 --- /dev/null +++ b/src/models.rs @@ -0,0 +1,72 @@ +use chrono::NaiveDateTime; +use diesel::prelude::*; +use serde_derive::Serialize; + +#[derive(Identifiable, Queryable, Selectable, Insertable, Debug)] +#[diesel(table_name = crate::schema::post)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] +pub struct Post { + pub id: i64, + pub description: String, + pub posted_date: NaiveDateTime, + pub crawled_date: NaiveDateTime, +} + +#[derive(Identifiable, Queryable, Selectable, Associations, Debug)] +#[diesel(belongs_to(Post))] +#[diesel(table_name = crate::schema::image)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] +pub struct Image { + pub id: i32, + pub post_id: i64, + pub url: String, +} + +#[derive(Insertable, Associations, Debug)] +#[diesel(belongs_to(Post))] +#[diesel(table_name = crate::schema::image)] +pub struct NewImage { + pub post_id: i64, + pub url: String, +} + +#[derive(Identifiable, Queryable, Selectable, Associations, Debug)] +#[diesel(belongs_to(Post))] +#[diesel(table_name = crate::schema::video)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] +pub struct Video { + pub id: i32, + pub post_id: i64, + pub url: String, +} + +#[derive(Insertable, Associations, Debug)] +#[diesel(belongs_to(Post))] +#[diesel(table_name = crate::schema::video)] +pub struct NewVideo { + pub post_id: i64, + pub url: String, +} + +#[derive(Serialize)] +pub struct PostWithMedia { + pub id: i64, + pub description: String, + pub posted_date: NaiveDateTime, + pub crawled_date: NaiveDateTime, + pub images: Vec<String>, + pub videos: Vec<String>, +} + +impl PostWithMedia { + pub fn from_post(post: &Post) -> Self { + PostWithMedia { + id: post.id, + description: post.description.clone(), + posted_date: post.posted_date, + crawled_date: post.crawled_date, + images: vec![], + videos: vec![], + } + } +} diff --git a/src/schema.rs b/src/schema.rs index 41ff85b..62925ad 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -17,9 +17,19 @@ diesel::table! { } } +diesel::table! { + video (id) { + id -> Integer, + post_id -> BigInt, + url -> Text, + } +} + diesel::joinable!(image -> post (post_id)); +diesel::joinable!(video -> post (post_id)); diesel::allow_tables_to_appear_in_same_query!( image, post, + video, );