Anexe seu código R aos gráficos que você tweeta para ver os tweets reproduzíveis de R!

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[Esteartigofoipublicadopelaprimeiravezem[Thisarticlewasfirstpublishedon R – rud.is, e gentilmente contribuiu para os R-blogueiros]. (Você pode relatar um problema sobre o conteúdo desta página aqui)


Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.

Eu peguei esse tweet de Terence Eden sobre o uso de alt-text da imagem do Twitter para o tweet “PGP sign” e minha mente imediatamente foi para “como posso abusar disso por comunicações secretas, comando e controle malicioso e incorporação de código R em tweets? ”.

Quando você cola ou carrega uma imagem para twittar (interface da Web, pelo menos), você tem a oportunidade de adicionar texto “alt” que, teoricamente, deve ajudar a comunicar o conteúdo da imagem às pessoas usando a tecnologia assistida. Terence descobriu que o limite de texto alternativo no Twitter é grande (~ 1K), o que é bastante de espaço para código R útil.

Procurei algo para usar como exemplo e decidi usar os dados do COVID Stimulus Watch. A seguir, o gráfico deste tweet – https://twitter.com/hrbrmstr/status/1261641887603179520.

Não estou postando o gráfico aqui porque não é nada de especial, mas o código está abaixo.

library(hrbrthemes);

x 20200400)&x[,3]>0,];
x[,1] 

Ponto e vírgula são necessários porque as novas linhas de b / c serão removidas quando colarmos esse bloco de código na caixa de entrada de texto alternativo.

Podemos ler esse código novamente no R com alguma ajuda de read_html() & {estilizador}:

library(rtweet)
library(rvest)
library(stringi)
library(magrittr)

pg % 
  html_attr("alt") %>% 
  keep(stri_detect_fixed, "library") %>% 
  styler::style_text()
library(hrbrthemes)
x  20200400) & x[, 3] > 0, ]
x[, 1] 

A API do Twitter parece não retornar texto alternativo:

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
rtweet::lookup_statuses("1261641887603179520") %>% 
  jsonlite::toJSON(pretty=TRUE)
## [
##   {
##     "user_id": "5685812",
##     "status_id": "1261641887603179520",
##     "created_at": "2020-05-16 12:57:20",
##     "screen_name": "hrbrmstr",
##     "text": "Twitter's img alt-text limit is YUGE! So, we can abuse it for semi-covert comms channels, C2, or for "embedding" the code ## that makes this chart!nnUse `read_html()` on URL of this tweet; find 'img' nodes w/html_nodes(); extract 'alt' attr text w/## html_attr(). #rstats nnh/t @edent https://t.co/v5Ut8TzlRO",
##     "source": "Twitter Web App",
##     "display_text_width": 278,
##     "is_quote": false,
##     "is_retweet": false,
##     "favorite_count": 8,
##     "retweet_count": 2,
##     "hashtags": ["rstats"],
##     "symbols": [null],
##     "urls_url": [null],
##     "urls_t.co": [null],
##     "urls_expanded_url": [null],
##     "media_url": ["http://pbs.twimg.com/media/EYI_W-xWsAAZFeP.png"],
##     "media_t.co": ["https://t.co/v5Ut8TzlRO"],
##     "media_expanded_url": ["https://twitter.com/hrbrmstr/status/1261641887603179520/photo/1"],
##     "media_type": ["photo"],
##     "ext_media_url": ["http://pbs.twimg.com/media/EYI_W-xWsAAZFeP.png"],
##     "ext_media_t.co": ["https://t.co/v5Ut8TzlRO"],
##     "ext_media_expanded_url": ["https://twitter.com/hrbrmstr/status/1261641887603179520/photo/1"],
##     "mentions_user_id": ["14054507"],
##     "mentions_screen_name": ["edent"],
##     "lang": "en",
##     "geo_coords": ["NA", "NA"],
##     "coords_coords": ["NA", "NA"],
##     "bbox_coords": ["NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"],
##     "status_url": "https://twitter.com/hrbrmstr/status/1261641887603179520",
##     "name": "boB • Everywhere is Baltimore • Rudis",
##     "location": "Doors & Corners",
##     "description": "Don't look at me…I do what he does—just slower. 🇷 #rstats avuncular • pampa • #tired • 👨‍🍳 • ✝ • Prìomh ## Neach-saidheans Dàta @ @rapid7",
##     "url": "https://t.co/RgY1wHjoqM",
##     "protected": false,
##     "followers_count": 11886,
##     "friends_count": 458,
##     "listed_count": 667,
##     "statuses_count": 84655,
##     "favourites_count": 15140,
##     "account_created_at": "2007-05-01 14:04:24",
##     "verified": true,
##     "profile_url": "https://t.co/RgY1wHjoqM",
##     "profile_expanded_url": "https://rud.is/b",
##     "profile_banner_url": "https://pbs.twimg.com/profile_banners/5685812/1398248552",
##     "profile_background_url": "http://abs.twimg.com/images/themes/theme15/bg.png",
##     "profile_image_url": "http://pbs.twimg.com/profile_images/824974380803334144/Vpmh_s3x_normal.jpg"
##   }
## ]

mas ainda preciso vasculhar os documentos da API para descobrir se existe uma maneira de obtê-lo de forma mais programática.

Leia Também  Aprendendo Ciência de Dados: Testes A / B em menos de um minuto

Se queremos ser incrivelmente irresponsáveis ​​e burros (como um serviço de instalação de pacotes R recentemente semi-fechado), podemos ter cuidado com o vento e simplesmente traçá-lo completamente:

library(rtweet)
library(rvest)
library(stringi)
library(magrittr)

pg % 
  html_attr("alt") %>% 
  keep(stri_detect_fixed, "library") %>% 
  textConnection() %>% 
  source() %>% # THIS IS DANGEROUS DO NOT TRY THIS AT HOME
  print()

Sério, porém, não faça isso. Muitas coisas ruins podem acontecer quando você source() da internet.

FIN

Agora, você pode tornar seus gráficos do Twitter reproduzíveis na plataforma (até o Twitter fazer algo para impedir esse novo canal de comunicação e compartilhamento de arquivos).

Como os URLs de status do twitter são apenas solicitações GET, as organizações devem considerar a execução do conteúdo desses URLs por meio de extratores de texto alternativo apenas no caso de há alguns negócios engraçados acontecendo nos pontos de extremidade do usuário.



Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha o seu sabor: e-mail, twitter, RSS ou facebook …



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br