omdb-cli
Publicado por Pedro Fernandes (última atualização em 19/04/2022)
[ Hits: 1.405 ]
Homepage: https://github.com/PedroF37
Download 1638553320.omdb-cli (versão 2)
Script que usa a API do site: 'https://www.omdbapi.com', (Open Movie Database), para pegar os dados dos filmes e séries.
Infelizmente, não pega dados dos atores, pois a API do site não tem essa opção.
Mostra na tela do terminal dados como o nome, classificação, atores, sinopse etc.
O script usa o curl para fazer os pedidos na API, e você tem que pegar a chave da API no site. É gratuita.
Pode mudar o nome do script para o que quiser kk, (não sou muito original nos nomes kk), que não vai quebrar o script.
Alguns exemplos de uso:
Pegando dados da melhor série já feita pelo HOMEM! kk, pelo título da série e mostrando sinópse completa:
$ omdb-cli -T Fringe -p full
Chama pelo pelo id do IMDB pedindo sinópse breve:
$ omdb-cli -i tt0407362 -p short
Chama pelo título, ano, sinópse completa e especifica o tipo (filme ou série), para casos em que tem série e filme com o mesmo nome:
$ omdb-cli -T '12 Monkeys' -t series -y 2015 -p full
As únicas opções obrigatórias são a opção -T título ou -i ID, e estas são mutuamente exclusivas, ou seja, ou usa -T ou usa -i.
Se a série ou filme tiver espaços, tem que colocar entre aspas.
Ano são os 4 digitos apenas, "2008" não aceita 02/05/08, 02-05-2008 etc.
Também a opção -p (sinópse) se não especificar por padrao mostra a sinopse breve. Por exemplo, se digitar:
$ omdb-cli -T Fringe
o script vai agir como se tivesse digitado:
$ omdb-cli -T Fringe -p short
A ordem de chamada das opções não interessa, o script ordena tudo.
Por favor, lêr o cabeçallho que contém mais informações do que aqui (algumas delas importantes para o uso do script!)
Versão 2 - Enviado por Pedro Fernandes em 03/12/2021
Changelog: Versão 2.0 - 10-10-2021
Script recriado quase do zero, para não usar tanto sed e pipes, e para ficar um pouco mais limpo (que nem a função Usage, que parecia um testamento...)
Adicionado mais testes para pegar erros.
#!/bin/bash # ---------------------------------------------------------------------------- # # SCRIPT omdb-cli (ou o que quiser chamar em vez disso..) # AUTOR Pedro Fernandes # E-MAIL pedrobfernandes37@gmail.com # DATA 17-06-2021 - Inicio de script # ---------------------------------------------------------------------------- # # DESCRIÇÃO: # Script que usa a API do site 'https://www.omdbapi.com', # (Open Movie Database), para pegar os dados dos filmes # e séries. # O script mostra na tela algo assim: # Title Fringe # Year 2008–2013 # Runtime 46 min # Genre Drama, Mystery, Sci-Fi, Thriller # Director N/A # Writer J.J. Abrams, Alex Kurtzman, Roberto Orci # Actors Anna Torv, Joshua Jackson, Jasika Nicole, John Noble # Language English # Country USA, Canada # Awards Nominated for 3 Primetime Emmys. Another 18 wins & 84 nominations. # Rating 8.4/10,Metascore:N/A # Rating 8.4,Source:IMDB # Type series # Total Seasons 5 # Plot # An F.B.I. agent is forced to work with an institutionalized scientist and his son in order to # rationalize a brewing storm of unexplained phenomena. # Alguns filmes e séries mostra classificações de outros sites como o # Rotten Tomatoes e Metacritic, mas não são todos, o único que mostra sempre # é do imdb. # ---------------------------------------------------------------------------- # # COMO USAR: # A API tem MUITAS opções para se fazer os pedidos, mas o script # só usa umas poucas. Nem todas as 'flags' no script correspondem # ás 'flags' oficiais na API. # Elas são: # -T Título - Especifica o título do filme ou série # -t tipo - Especifica se procura por filme ou série. Aceita: # 'movie|MOVIE|series|SERIES' apenas, (INGLÊS). # -i ID - Especifica o id (ttxxxxxxx) do filme ou série do imdb # -y ano - Especifica o ano. No formato '2008'. Não aceita '22/05/2008' # '22-05-2008' '22 05 2008' '22-05-08' etc. # -p full|short - Especifica se a sinopse é completa ou breve. Aceita # 'full|FULL|Full ou short|SHORT|Short' apenas. # Exemplos de uso: # Pegando pelo título, ano e especificando sinopse completa: # $ omdb-cli -T Fringe -y 2008 -p FULL # Pelo id do IMDB e sinópse breve: # $ omdb-cli -i tt0407362 -p short # Série com espaços: # $ omdb-cli -T 'Sons of Anarchy' # Especificando o tipo (série ou filme) # $ omdb-cli -T '12 Monkeys' -t series -p full # De todas as opções, as únicas obrigatórias são -T e -i, e estas # são mutuamente exclusivas. Ou seja, ou usa -T Título ou usa -i ID. # O ID é o método mais 'infalivel' de pegar o filme/série certo, mas, # também é o mais chato e que faz menos sentido de usar. Se eu tenho # que ir procurar o ID, então abro logo o navegador e vou ver o filme # direto no site do imdb! O ID está incuido no sript apenas porque a # API tem essa opção e para deixar o script mais completo, (que nem # no meu script 'imdb-cli'). # Também, como nos dois últimos exemplos, se o filme ou série tiver # espaços, tem que colocar entre aspas. # A ordem não interessa, o script ordena as opções por si, então, # pode colocar '-T titulo -p full -y ano', ou '-p full -T titulo -y ano', # que vai tudo dar no mesmo.. # Por fim, a sinopse, (opção -p), se não especificar a opção, por padrão # usa '-p short'. Ou seja, se digitar: 'omdb-cli -T fringe' vai mostrar como # se tivesse digitado: 'omdb-cli -T fringe -p short'. # ---------------------------------------------------------------------------- # # NOTAS: # 1 - Pode acontecer de chamar o script e não funcionar por https. # Nesse caso tente chamar o script assim: 'Proto=http omdb-cli ...' # 2 - O script usa o comando fold, com as opções (-w|--width) e (-s|--space). # No meu monitor a largura (opção -w) de 160 fica perfeito e é a largura # padrão no script. Tem a variável 'FoldWidth=${FoldWidth:=160}' no inicio # do script. Você pode chamar o script: 'FoldWidth=xxx omdb-cli ...' ou, # pode mudar o número aqui no script. # 3 - Pode acontecer de você pedir dados de uma série ou filme e receber o errado. # Por exemplo, se você digitar: 'omdb-cli -T MacGyver', vai receber qual? # A série antiga ou a nova série que tem o mesmo nome? # Nestes casos tem 3 opções: # Chamar pelo id do imdb # $ omdb-cli -i ttxxxxxxx # Especificar o ano # $ omdb-cli -T MacGyver -y ano # Ou, se uma for série e o outro for filme, como no caso do '12 Monkeys', # especificar a opção -t tipo: # $ omdb-cli -T '12 Monkeys' -t series # 4 - O script usa o curl para fazer o pedido na API, então tem que instalar # 5 - Por fim, você precisa pegar a chave da API no site: # 'https://www.omdbapi.com'. Tem a opção de chave paga, MAS, tem # também a opção de chave gratuita. Basta dar o nome, e-mail e # dizer para que quer usar a API. # Você coloca a chave na variável: 'Key' # ---------------------------------------------------------------------------- # # VERSÃO/CHANGELOG: # 1.0 - 27-06-2021 ### Script completado e testado o melhor possível. ### Caracteres estranhos como '\"..\" e &' ### que aparecem na sinópse para escapar '"' etc, ### detectados e substituídos. Mais caracteres ### que venham a ser achados serão removidos em ### futuras versões se/caso aparecam. # ---------------------------------------------------------------------------- # ##### PARÂMETROS ##### ## Sua chave da API aqui Key='' ## Aqui você coloca a largura para o comando fold ## para a opção -w. Basta trocar o número. FoldWidth=${FoldWidth:=160} ## A partir daqui não precisa mexer mais. ApiKey='&apikey=' UserAgent=$(type -p curl) Proto=${Proto:-https} QueryDatabase='://www.omdbapi.com/?' TitleQuery='t=' IdQuery='i=' StoryLine='&plot=' ReleasedYear='&y=' Category='&type=' Plot=${Plot:-short} CommandLine=${ApiKey}${Key} # ---------------------------------------------------------------------------- # ##### FUNÇÕES ##### function ErrorExit { echo ${0##*/}: $@ >&2 exit 1 } function Usage { clear cat <<EOF Uso: ${0##*/} -T TÍTULO | -i ID [OPÇÕES...] ONDE OPÇÕES SÃO: -T TÍTULO Procura pelo Título do filme ou série. -t tipo Especifica se procura por filme ou série aceita: -t movie | -t series -i ID Procura pelo ID do imdb (ttxxxxxxx). ID é tt seguido de entre 7 a 8 digitos. -y ano Permite especificar o ano do filme ou série. -p short|full Especifica se mostra sinopse completa ou breve. Por padrão, se opção -p não for usada, a sinopse é breve. Exemplos de Uso: Consultando pelo título apenas: $ ${0##*/} -T Fringe Usando o ID do imdb e a opção -p para especificar sinopse breve: $ ${0##*/} -i tt0407362 -p short Especificando título da série, ano e sinopse completa: $ ${0##*/} -T 'Sons of Anarchy' -y 2008 -p full Especificando o tipo: $ ${0##*/} -T '12 Monkeys' -t series NOTAS: 1 - De todas as opções, as únicas obrigatórias são as opções -T ou -i e elas são mutuamente exclusivas. Ou seja, ou usa a opção -T ou usa a opção -i, mas não as duas juntas. 2 - Se filme ou série tiver espaços, como nos últimos exemplos, tem que colocar entre aspas. 3 - Ano do filme ou série são os 4 dígitos (2008), não aceita (01-03-2008)|(01/03/2008)|(01 03 2008) nem (01 03 08). 4 - Se não funcionar o script, pode ser que o site 'https://www.omdbapi.com', não esteja aceitando pedidos por https. Neste caso, tente chamar o script assim: $ Proto=http ${0##*/} ... 5 - Se existir dois filmes ou séries com o mesmo nome, possivelmente receberá o filme ou série errado. Para resolver esse caso você pode usar um destes três métodos: 1 - Chamar o script usando o ID: $ ${0##*/} -i ttxxxxxxxx 2 - Chamar o script passando o ano do filme ou série: $ ${0##*/} -T fringe -y 2008 3 - Se for o caso de o nome corresponder a uma série e a um filme, então pode especificar a opção -t tipo: $ ${0##*/} -T '12 Monkeys' -t series EOF exit } function Parser { # Limpamos o retorno do pedido. # Com Kilos atrás de Kilos de sed pipes e gawks... # Claro que tem os módulos dos tais de pythons # e esse tal de 'jq', mas não sei usar nenhum dos # dois, isso é coisa pra programador.. # clear sed ' s!\("\)\(,\)\("\)!\1\n\3!g s/[]{}[]//g /"Writer"/s/([^)]*)//g s!\(\\"\)\([^\\"]*\)\(\\"\)!\2!g' | gawk -v fs='"' ' BEGIN { FS=fs OFS="<=>" } /"Title":/{print $2,$4}; /"Year":/{print $2,$4}; /"Released":/{print $2,$4}; /"Runtime":/{print $2,$4}; /"Genre":/{print $2,$4}; /"Director":/{print $2,$4}; /"Writer":/{print $2,$4}; /"Actors":/{print $2,$4}; /"Language":/{print $2,$4}; /"Country":/{print $2,$4}; /"Awards":/{print $2,$4}; /"Value":/{print "Rating",$0}; /"imdbRating":/{print "Rating",$4",Source:IMDB"}; /"Type":/{print $2,$4}; /"totalSeasons":/{print "Total Seasons",$4}; /"Plot"/{print $2,$4} ' | sed -n '{ /Plot/{h ; n} $G ; p}' | sed ' s/"Value"://g s!\(Plot\)\(<=>\)!\n\n\1\n\n! s/"//g s/"/"/g s!\(&\)\(amp;\)!\1!g' | sed '/^\n*$/{N; D}' | gawk -F"<=>" '{printf "\n%-8s\t\t%-8s\n", $1,$2}' | fold -w $FoldWidth -s echo } # ---------------------------------------------------------------------------- # ##### VERIFICAÇÕES ##### # Tem que ter pelo menos -T ou -i [ $# -eq 0 ] && { ErrorExit Não passou parâmetro/argumento nenhum. Use: ${0##*/} -h para ajuda. } # Tem que ter a chave da API [ -z "$Key" ] && { ErrorExit Não tem chave de API. } # Precisamos do curl [ -z "$UserAgent" ] && { ErrorExit Necessita do programa curl. } # ---------------------------------------------------------------------------- # ##### PEGANDO PARÂMETROS E ARGUMENTOS ##### while getopts :t:i:y:T:p:h Opt do # Dependendo da opção, vai montando o comando. # O Título e o ID, são mutuamente exclusivos. # Para além disso, ambos têm que vir primeiro na # URL: 'https://www.omdbapi.com/?[Ti]='; então eles # são inseridos no comando no final do script apenas. # Também, a chave da API é o último argumento da URL, # então o comando é composto da direta para a esquerda: # 'CommandLine=${ChaveAPI}; CommandLine=${Var1}${ChaveAPI}..' case "$Opt" in T) Title=$OPTARG # Não pode ter espaços na URL, então, John Wick Chapter 2 # não passa, mas passa John+Wick+Chapter+2. Atenção, # que aqui está contando com que o nome da serie ou filme # seja inserido entre aspas. Se não não vai servir de nada!! Title=${Title// /+} ;; i) ID=$OPTARG # ID tem que ser ttxxxxxxx|ttxxxxxxxx (7 ou 8 digitos) [[ "$ID" =~ ^tt[0-9]{7,8}$ ]] && : || { ErrorExit ID especificado errado. Use ${0##*/} -h para ajuda. } ;; t) Type=$OPTARG # Type, tem que ser 'movie|MOVIE|series|SERIES' em Inglês... case $Type in series|SERIES|movie|MOVIE) : ;; # Vocês aqui no Brasil falam Seriado né?... séries|SÉRIES|série|SÉRIE|seriados|SERIADOS|seriado|SERIADO) Type='series' ;; filmes|FILMES|filme|FILME) Type='movie' ;; *) ErrorExit Opção -t é 'movie|MOVIE|series|SERIES' ;; esac CommandLine=${Category}${Type}${CommandLine} ;; y) Year=$OPTARG # Ano, tem que ser os 4 dígitos apenas do ano (2008), # não pode ser '22-01-2008' ou '22/01/2008'. Atenção, # que a expressão pega os casos de '22-01-2008' ou # '22/01/2008', mas não pega casos de '22-02-08' ou # '22 01 2008'. Year=${Year//[[:digit:]][[:digit:]][\-\/:]} CommandLine=${ReleasedYear}${Year}${CommandLine} ;; p) Plot=$OPTARG # Plot (sinopse) suporta 'full|FULL|Full ou |short|SHORT|Short' apenas. [[ "$Plot" =~ ^(full|FULL|Full|short|SHORT|Short)$ ]] && : || { ErrorExit Opção é: -p 'full|FULL|Full ou short|SHORT|Short' } CommandLine=${StoryLine}${Plot}${CommandLine} ;; h) Usage ;; *) ErrorExit Opção desconhecida: $Opt Use: ${0##*/} -h para ajuda. ;; esac done # Não pode pegar pelo título e id ao mesmo tempo. [ -n "$Title" ] && [ -n "$ID" ] && { ErrorExit Não pode usar -T título e -i ID no mesmo comando. } # ---------------------------------------------------------------------------- # ##### EXECUTAMOS O PEDIDO ##### # Se não der certo, tente: $ Proto=http omdb-cli ... if [ -n "$Title" ] then $UserAgent -s \ ${Proto}${QueryDatabase}${TitleQuery}${Title}${CommandLine} \ | Parser elif [ -n "$ID" ] then $UserAgent -s \ ${Proto}${QueryDatabase}${IdQuery}${ID}${CommandLine} \ | Parser else ErrorExit Erro desconhecido. fi exit $? # ---------------------------------------------------------------------------- #
Cadastrando usuários no Squid através de Shell Script
Inclusão/Exclusão de usuários no CVS.
Script para instalação Gerix Wi-fi Cracker no Kali Linux
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Vou voltar moderar conteúdos de Dicas e Artigos (2)
Melhorando a precisão de valores flutuantes em python[AJUDA] (8)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta