Advertisement
Guest User

anta.sh

a guest
Apr 9th, 2020
588
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 17.40 KB | None | 0 0
  1. #!/bin/bash
  2. # anta.sh -- puxa artigos da homepage de <oantagonista.com>
  3. # v0.10.41   mar/2020  by mountaineerbr
  4.  
  5. #padrões
  6.  
  7. #intervalo de tempo entre reacessos da opt '-r':
  8. TEMPO=(6m 3${RANDOM: -1})
  9. #TEMPO=
  10.  
  11. #curl e wget connection-timeout
  12. #timeout
  13. TOUT=30
  14. #retries
  15. RETRIES=4
  16.  
  17. #tentativas do script
  18. TENTATIVAS=6
  19. #obs: além das tentativas do curl/wget
  20.  
  21. #debug log file:
  22. LOGF=/tmp/anta.log
  23.  
  24. #caminho do script para funão de auto-update
  25. SCRIPT="${BASH_SOURCE[0]}"
  26.  
  27. #Ref tapir art: http://www.ascii-art.de/ascii/t/tapir.txt
  28. HELP="Anta.sh -- Puxa os artigos de <oantagonista.com>
  29.  
  30.                         _,.,.__,--.__,-----.
  31.                      ,\"\"   '))              \`.
  32.                    ,'   e                    ))
  33.                   (  .='__,                  ,
  34.                    \`~\`     \`-\  /._____,/   /
  35.                             | | )    (  (   ;
  36.                             | | |    / / / /
  37.                     vvVVvvVvVVVvvVVVvvVVvVvvvVvPhSv
  38.  
  39.  
  40. SINOPSE
  41.     anta.sh  [-f] [INDEX|URL]
  42.    
  43.     anta.sh  [-f] [-NUM|-pNUM]
  44.            
  45.     anta.sh  -r [-sNUM]
  46.    
  47.     anta.sh  [-huuv]
  48.  
  49.  
  50.     Este script puxa os textos resumidos e integrais dos artigos do site
  51.     <www.oantagonista.com>. Por padrão, se nenhuma opção for inserida, o
  52.     script puxará a primeira páginas inicial com os resumos dos artigos e
  53.     sairá. A opção '-pNUM' ou somente '-NUM' configura quantas páginas ini-
  54.     ciais devem ser puxadas.
  55.  
  56.     O texto integral dos artigos pode ser recuperado com a opção '-f'. Com
  57.     esta opção, também pode-se especificar URLs de artigos específicos.
  58.  
  59.     O número de INDEX de uma página inicial de <oantagonista.com> correspon-
  60.     de a ordem cronológica da mais recente para a mais antiga. Assim, a pá-
  61.     gina mais recente tem o número de INDEX igual a '1'. É possível puxar
  62.     uma única página específica na ordem cronológica, como por exemplo a dé-
  63.     cima página mais recente. Para isso, passe um único número de INDEX ao
  64.     script.
  65.  
  66.     A opção '-r' faz um reacesso da primeira página inicial e puxa os resu-
  67.     mos dos artigos a cada ~${TEMPO[*]} segundos. O intervalo de tempo entre
  68.     reacessos pode ser definido por '-sNUM', em que NUM é um número natural
  69.     em segundos, ou '-s \"NUMm\"', sendo 'm' para minutos, sendo aceitos os
  70.     argumentos comumente passados ao comando 'sleep' para esta opção.
  71.  
  72.     Ao final da realização de trabalhos, será impresso a data e hora e, em
  73.     seguida, alguns números. Os números entre parenteses, quando se utiliza
  74.     a opção '-r', são o intervalo de tempo entre reacessos. Nos demais modos,
  75.     será impresso entre colchetes o tempo de realização da tarefa em segundos.
  76.  
  77.     Em casos mais específicos, como fazer o download de um grande volume de
  78.     páginas, pode-se ajustar o tempo de 'timeout' e de retentativas na cabe-
  79.     ça do código-fonte deste script.
  80.  
  81.  
  82. LIMITES DE ACESSO
  83.     Nos termos de uso do próprio site, há somente uma limitação:
  84.  
  85.     << 2.2.1. Você se compromete a não utilizar qualquer sistema automatiza-
  86.     do, inclusive, mas sem se limitar a 'robôs', 'spiders' ou 'offline
  87.     readers,' que acessem a Plataforma de maneira a enviar mais mensagens
  88.     de solicitações aos servidores do site O Antagonista em um dado período
  89.     de tempo do que seja humanamente possível responder no mesmo período a-
  90.     través de um navegador convencional. >>
  91.  
  92.     <https://www.oantagonista.com/termos-de-uso>, acesso em set/2019.
  93.  
  94.  
  95. GARANTIA E REQUISITOS
  96.     Este programa é software livre e está licenciado sob a GNU GPL versão 3
  97.     ou superior e é oferecido sem suporte ou correção de bugs.
  98.  
  99.     Pacotes requeridos: Bash, cURL e/ou Wget. É recomendável instalar ambos
  100.     cURL e Wget caso encontre bloqueios de limites de acesso do servidor.
  101.  
  102.     Se achou o script útil, conside me mandar um trocado! =)
  103.  
  104.         bc1qlxm5dfjl58whg6tvtszg5pfna9mn2cr2nulnjr
  105.  
  106.  
  107. BUGS
  108.     Algumas sobreposições do texto com mensagens de carregamento eviadas
  109.     pelo stderr.
  110.    
  111.     A opção para puxar artigos integrais das páginas inciais pode puxar o
  112.     mesmo artigo em duplicata.
  113.  
  114.  
  115. EXEMPLOS DE USO
  116.     ( 1 ) Puxar as primeiras quatro páginas iniciais do portal:
  117.  
  118.         $ anta.sh -p4
  119.        
  120.         $ anta.sh -4
  121.  
  122.  
  123.     ( 2 ) Reacesar a página inicial a cada 10 minutos:
  124.  
  125.         $ anta.sh -r -s'10m'
  126.  
  127.         $ anta.sh -r -s600      #10m = 600 segundos
  128.  
  129.  
  130.     ( 3 ) Textos completos dos artigos das primeiras 4 páginas do portal:
  131.  
  132.         $ anta.sh -f -p4
  133.  
  134.  
  135.         Dica: use o paginador Less:
  136.  
  137.         $ anta.sh -f4 | less
  138.  
  139.  
  140.     ( 4 ) Puxar artigos completos das URLs (neste caso, '-f' é opcional):
  141.  
  142.         $ anta.sh -f '/brasil/toffoli-nega-ter-recebido-e-acessado-relatorios-do-coaf/'
  143.  
  144.  
  145.         $ anta.sh '/brasil/o-que-o-congresso-ressuscitou-na-lei-de-abuso-de-autoridade/' 'https://www.oantagonista.com/brasil/o-que-o-congresso-ressuscitou-na-lei-de-abuso-de-autoridade/'
  146.  
  147.  
  148.     ( 5 ) Puxar artigos pelo número de INDEX de uma página específica:
  149.        
  150.         $ anta.sh 12512       #somente resumos dos artigos
  151.        
  152.         $ anta.sh -f 12512    #artigos integrais
  153.  
  154.  
  155. OPÇÕES
  156.     -NUM      Mesmo que opção '-p'.
  157.  
  158.     -d    Debug, registra em /tmp/anta.log e anta.linksf.log.
  159.  
  160.     -f [INDEX|URLs]
  161.           Texto integral dos artigos das páginas iniciais.
  162.  
  163.     -h    Mostra esta ajuda.
  164.  
  165.     -p [NUM]  Número de páginas a serem puxadas; padrão=1.
  166.  
  167.     -r    Reacessar a página inicial em intervalos de tempo.
  168.  
  169.     -s [NUM]  Intervalo de tempo entre reacessos da opção '-r'; aceita 'NUMm'
  170.           para minutos e 'NUMs' para segundos; padrão~=240.
  171.  
  172.     -u    Checar por atualização do script.
  173.    
  174.     -uu       Auto-atualização do script.
  175.  
  176.     -v    Mostra a versão do script."
  177.  
  178. #Orign servers
  179. SERVERS=('www.oantagonista.com' 'cache.oantagonista.com' 'cms.oantagonista.com' 'm.oantagonista.com' 'wp.oantagonista.com' 'editores.oantagonista.com')
  180. #'oantagonista.com' -- redirect to antagonista+
  181. #'52.204.39.109'
  182. #'3.82.68.200'
  183. #'18.204.255.62'
  184. #'52.72.53.233'
  185. #'34.198.178.99'
  186. #'54.210.110.10'
  187. #'52.86.216.106'
  188. #'34.207.47.120'
  189. #'18.214.96.27'
  190.  
  191. AGENTS=('User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)' 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1' 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41' 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36' 'User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; SGP771 Build/32.2.A.0.253; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.9[<0;45;17M8 Safari/537.36' 'User-Agent: Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; RM-1127_16056) AppleWebKit/537.36(KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10536' 'User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; SGP771 Build/32.2.A.0.253; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36' 'User-Agent: Mozilla/5.0 (Linux; Android 7.0; SM-G892A Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.107 Mobile Safari/537.36' 'user-agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36' 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586' 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0' 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko' 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0' 'user-agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36')
  192.  
  193.  
  194. ## Funções
  195. # Filtro HTML e tradução de códigos
  196. #https://ascii.cl/htmlcodes.htm
  197. sedhtmlf() { sed -e 's/<\/div><\/span><p>/\n /g' -e 's/<\/time><div>/\n /g'  -e 's/<\/time><\/span><p>/\n /g'   -e 's/ga(".*//g' -e 's/window\._.*;//g' -e 's/<\/p><p class="paragraph-text.*<\/span><\/p><p>/\n/g' -e 's/<p>/&\n/g' -e 's/<br\/><br\/>/&\n/g' -e 's/<[^>]*>//g' -e 's/\r//g' -e 's/\xc2\xa0/ /g' -e 's/&nbsp;/ /g' -e 's/&mdash;/--/g' -e 's/&#32;/ /g' -e 's/&#33;/\!/g' -e 's/&#34;/\"/g' -e 's/&#35;/\#/g' -e 's/&#36;/$/g' -e 's/&#37;/%/g' -e 's/&#38;/\&/g' -e "s/&#39;/'/g" -e 's/&#40;/(/g' -e 's/&#41;/)/g' -e 's/&#42;/*/g' -e 's/&#43;/+/g' -e 's/&#44;/,/g' -e 's/&#45;/-/g' -e 's/&#46;/./g' -e 's/&#47;/\//g' -e 's/&#64;/@/g' -e 's/&#8211;/-/g' -e 's/&#8212;/--/g' -e "s/&#8216;/'/g" -e "s/X&#8217;/'/g" -e 's/&#8218;/,/g' -e 's/&#8220;/\"/g' -e 's/&#8221;/\"/g' -e 's/&#8222;/\"/g' -e 's/&#8230;/.../g' -e 's/&#8364;/EUR/g' -e 's/&amp;/\&/g' -e 's/&#032;/ /g' -e 's/&#033;/\!/g' -e 's/&#034;/\"/g' -e 's/&#035;/\#/g' -e 's/&#036;/$/g' -e 's/&#037;/%/g' -e 's/&#038;/\&/g' -e "s/&#039;/'/g" -e 's/&#040;/(/g' -e 's/&#041;/)/g' -e 's/&#042;/*/g' -e 's/&#043;/+/g' -e 's/&#044;/,/g' -e 's/&#045;/-/g' -e 's/&#046;/./g' -e 's/&#047;/\//g' -e 's/&#064;/@/g' -e 's/&#8211;/–/g' -e 's/&#8212;/—/g' -e 's/&#8216;/‘/g' -e 's/&#8217;/’/g' -e 's/&#8218;/‚/g' -e 's/&#8220;/“/g' -e 's/&#8221;/”/g' -e 's/&#8222;/„/g' -e 's/&#8224;/†/g' -e 's/&#8225;/‡/g' -e 's/&#8226;/•/g' -e 's/&#8230;/…/g' -e 's/&#8240;/‰/g' -e 's/&#8364;/€/g' -e 's/&#8482;/™/g';}
  198.    
  199. # Check for errors
  200. cerrf()
  201. {
  202.     if grep -Fq -e 'Você será redirecionado para a página inicial' -e 'Page not found' <<< "${PAGE}"; then
  203.         printf 'Página não encontrada -- %s.\n' "${COMP}" 1>&2
  204.         exit 1
  205.     elif [[ -z "${PAGE}" ]] || grep -Fiq -e 'has been limited' -e 'you were blocked' \
  206.         -e 'to restrict access' -e 'access denied' -e 'temporarily limited' \
  207.         -e 'you have been blocked' -e 'has been blocked' -e 'Error processing request' <<< "${PAGE}"; then
  208.         return 1
  209.     elif ! grep -q '[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]' <<< "${PAGE}"; then
  210.         return 1
  211.     fi
  212.  
  213.     return 0
  214. }
  215.  
  216. # Cheque por update
  217. updatef() {
  218.     #check version of this script
  219.     VER_0="$(grep -Fm1 '# v' "${SCRIPT}")"
  220.    
  221.     #check upstream version
  222.     CODE="$(${UPAPP[0]} "https://raw.githubusercontent.com/mountaineerbr/scripts/master/anta.sh")"
  223.     VER_1="$(grep -Fm1 '# v' <<<"${CODE}")"
  224.    
  225.     #check script versions
  226.     if [[ "${VER_1}" != "${VER_0}" ]]; then
  227.         if [[ "${UPOPT}" -eq 1 ]]; then
  228.             printf "Atualização disponível. Passe \'-uu\' para atualizar.\n"
  229.             printf '<https://github.com/mountaineerbr/scripts/blob/master/anta.sh>\n'
  230.         else
  231.             printf '%s\n' "${CODE}" > "${SCRIPT}"
  232.         fi
  233.     else
  234.         printf 'O script está atualizado.\n'
  235.     fi 
  236.  
  237.     exit
  238. }
  239.  
  240. # Puxar páginas iniciais e testar por erros;
  241. #tamanho: até ~2020 =~ 650KB; mar/2020 = 34KB, compressed 8.7KB
  242. puxarpgsf() {
  243.     # Se for só uma página inicial, acesse site sem subdominios (evita bloqueios)
  244.     [[ "${PAGINAS}" -eq 1 ]] && [[ -z "${FULLOPT}" ]] && COMP='/'
  245.    
  246.     # Tentar puxar quantas páginas iniciais quiser e testar por erros
  247.     N=2;while [[ "${N}" -le "$((TENTATIVAS))" ]]; do
  248.         #puxar a página
  249.         PAGE="$(${YOURAPP[${RANDOM} % ${#YOURAPP[@]}]} "${AGENTS[${RANDOM} % ${#AGENTS[@]}]}" "${SERVERS[${RANDOM} % ${#SERVERS[@]}]}/${COMP#/}")"
  250.        
  251.         #debug, código da página
  252.         [[ -n "${DEBUG}" ]] && printf -- '>>> PAGE\n%s\n\n' "${PAGE}" >> "${LOGF}"
  253.        
  254.         #checar por erro
  255.         cerrf && return 0
  256.        
  257.         #havendo erro, chamar curl mais uma vez
  258.         printf 'Tentativa %s      \r' "${N}" 1>&2
  259.        
  260.         #aumentar um no contador
  261.         ((N++))
  262.        
  263.         #debug, n tentativas
  264.         [[ -n "${DEBUG}" ]] && printf -- '>>> Tentativa: %s\n\n' "${N}" >> "${LOGF}"
  265.        
  266.         sleep 5
  267.     done
  268.  
  269.     # Check if it was succesfull at last or exit with error
  270.     cerrf && return 0 || return 1
  271. }
  272.  
  273. # Pegar os textos curtos das Página(s) Inicial(is)
  274. anta() {
  275.     #timer de tempo de tarefa
  276.     SECONDS=0
  277.     # O for loop para pegar quantas páginas quiser
  278.     for ((i=PAGINAS;i>=1;i--)); do
  279.         #barra de acompanhamento
  280.         printf 'Página %s/%s        \r' "${i}" "${PAGINAS}" 1>&2
  281.        
  282.         #debug, ref das páginas baixadas
  283.         [[ -n "${DEBUG}" ]] && printf -- '>>> Página: %s / %s\n\n' "${i}" "${PAGINAS}" >> "${LOGF}"
  284.        
  285.         #puxar a página
  286.         COMP="/pagina/${i}/"
  287.         if ! puxarpgsf; then
  288.             printf '\nAcesso limitado.  [%s]\n' "${SECONDS}" 1>&2
  289.             [[ -z "${ROLLOPT}" ]] && exit 1
  290.         fi
  291.        
  292.         #cópia de links
  293.         LINKS2="$(grep -Fi 'data-link=' <<< "${PAGE}" | sed -e 's/\(^.*data-link="\)\(.*\)\(" .*$\)/\2/')"
  294.        
  295.         #print links
  296.         tac <<< "${LINKS2}"
  297.         printf '===\n'
  298.        
  299.         #imprime a página e processa
  300.         sedhtmlf <<< "${PAGE}" | grep --group-separator='===' --color=never -B10 -A4 -e '[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9] ' | sed -e '$s/$/\n===\n/' -e '/^Ver mais.*/d' -e 's/^\s\s*//g' | tac -rs'^===' | awk NF
  301.         #also works: grep -F -B13 '<p>' <<<"$PAGE" | sedhtmlf | awk NF
  302.        
  303.         #parar se foi especificado número de index de pg específica
  304.         [[ -n "${ONLYONE}" ]] && return 0
  305.     done
  306.  
  307.     #hora que terminou
  308.     [[ -n "${ROLLOPT}" ]] && PRINTT="(${TEMPO[*]})"
  309.     printf 'Puxado em %s.  %s [%s]\n' "$(date)" "${PRINTT}" "${SECONDS}"
  310. }
  311.  
  312. # -r Anta Rolante
  313. antaroll() {
  314.     #set to first page
  315.     PAGINAS=1
  316.     XAGAIN=780
  317.  
  318.     AGAIN="${XAGAIN}"
  319.     while :; do
  320.         # Loop para puxar as notícias
  321.         while :; do
  322.             anta || break
  323.             sleep "${TEMPO[@]}"
  324.         done
  325.  
  326.         #grand retry timer
  327.         ((AGAIN>=1800)) && AGAIN="${XAGAIN}"
  328.         AGAIN="$((AGAIN+180))"
  329.        
  330.         #grand retry
  331.         printf 'Aguardando %s minutos..\n' "$((AGAIN/60))" 1>&2
  332.         sleep "${AGAIN}"
  333.     done
  334. }
  335.  
  336. # -f Artigos inteiros
  337. fulltf() {
  338.     #ver se notícia é do MoneyTimes
  339.     if grep -Fiq 'moneytimes/' <<< "${COMP}"; then
  340.         printf 'Notícia do <moneytimes.com.br>.\n'
  341.         printf '%s\n' "${COMP}"
  342.         printf '====\n'
  343.         return 0
  344.     else
  345.         #puxa página do artigo texto integral
  346.         if ! puxarpgsf; then
  347.             printf '\nAcesso limitado.  [%s]\n' "${SECONDS}" 1>&2
  348.             exit 1
  349.         fi
  350.     fi
  351.  
  352.     {
  353.     #cabeçalho
  354.     grep -Fe '="entry-title' -e 'entry-date published' <<<"${PAGE}"
  355.    
  356.     #processa página
  357.     grep '^\s*<p>' <<<"${PAGE}"
  358.     } | sedhtmlf | sed  -Ee 's/^(\t|\b|\s)*//g' -e '/^$/d' -e 's/\s\s*/ /g'
  359.  
  360. #-e 's/ga(.*);//g'
  361.     #print link
  362.     printf '%s\n' "${COMP}"
  363.     printf '====\n'
  364.    
  365.     return 0
  366. }
  367.  
  368. # Puxar links das páginas inciais para os artigos completos
  369. linksf() {
  370.     #timer de tempo execução de tarefa
  371.     SECONDS=0
  372.     # Check for user-suppplied links
  373.     if [[ ${*} = */* ]]; then
  374.         for i in ${@}; do
  375.             # Arrumar variável para passar nos testes da 'puxarpgsf'
  376.             PAGINAS=0
  377.             COMP="${i,,}"
  378.             COMP="${COMP/https:\/\/www.oantagonista.com}"
  379.             fulltf
  380.         done
  381.     else
  382.         # Get Links from initial pages
  383.         for ((i=PAGINAS;i>=1;i--)); do
  384.             #barra de acompanhamento
  385.             printf 'Links %s/%s        \r' "${i}" "${PAGINAS}" 1>&2
  386.            
  387.             #prepara o link da página inicial a ser puxada
  388.             export COMP="/pagina/${i}/"
  389.  
  390.             #puxa pgs iniciais
  391.             puxarpgsf
  392.            
  393.             #pega links para artigos integrais
  394.             LINKS="$(grep -Fi 'data-link=' <<< "${PAGE}" | sed -e 's/\(^.*data-link="\)\(.*\)\(" .*$\)/\2/')"
  395.  
  396.             #debug, dump links
  397.             [[ -n "${DEBUG}" ]] && printf -- '>>> Links:\n%s\n\n' "${LINKS}" >> "${LOGF}"
  398.  
  399.             #crawl each
  400.             for COMP in $(tac <<< "${LINKS//https:\/\/www.oantagonista.com/}"); do
  401.                 fulltf
  402.                 #sleep 1
  403.             done
  404.        
  405.             #parar se foi especificado número de index de pg específica
  406.             [[ -n "${ONLYONE}" ]] && return 0
  407.         done
  408.  
  409.         #hora que terminou tarefa
  410.         printf 'Puxado em %s.  [%s]\n' "$(date)" "${SECONDS}"
  411.    
  412.     fi
  413. }
  414.  
  415. # Test if cURL and Wget are available
  416. if command -v curl &>/dev/null; then
  417.     YOURAPP=("curl --compressed -s --retry ${RETRIES} --connect-timeout ${TOUT} -L -b non-existing -H")
  418.     UPAPP=('curl -s')
  419. fi
  420. if command -v wget &>/dev/null; then
  421.     YOURAPP+=("wget -t${RETRIES} -T${TOUT} -qO- --header")
  422.     UPAPP+=('wget -qO-')
  423. elif [[ -z "${YOURAPP[*]}" ]]; then
  424.     printf 'Requer cURL e/ou Wget.\n' 1>&2
  425.     exit 1
  426. fi
  427.  
  428. #########################################################AQUI###########################################################
  429. ## Parse options
  430. while getopts ':dfwhp:rs:uv0123456789' opt; do
  431.     case ${opt} in
  432.         ( [0-9] )
  433.             # Páginas para Puxar
  434.             PAGINAS="${PAGINAS}${opt}"
  435.             ;;
  436.         ( d )  
  437.             # Debugging, manter dump de dados
  438.             DEBUG=1
  439.             printf '>>> Date: %s\n\n' "$(date)" >> "${LOGF}"
  440.             ;;
  441.         ( f|w )
  442.             # Textos completos (Full text)
  443.             FULLOPT=1
  444.             ;;
  445.         ( h )  
  446.             # Show Help
  447.             printf '%s\n' "${HELP}"
  448.             exit 0
  449.             ;;
  450.         ( p )  
  451.             # Páginas para Puxar
  452.             PAGINAS="${OPTARG}"
  453.             ;;
  454.         ( r )  
  455.             # Anta Rolante
  456.             ROLLOPT=1
  457.             ;;
  458.         ( s )  
  459.             #tempo entre reacessos
  460.             TEMPO=(${OPTARG})
  461.             ;;
  462.         ( u )  
  463.             # Checar update
  464.             [[ -z "${UPOPT}" ]] && UPOPT=1 || UPOPT=2
  465.             ;;
  466.         ( v )  
  467.             # Version of Script
  468.             grep -Fm1 '# v' "${BASH_SOURCE[0]}"
  469.             exit 0
  470.             ;;
  471.         ( \? )  
  472.             # Invalid opt
  473.             printf 'Opção inválida: -%s' "${OPTARG}" 1>&2
  474.             exit 1
  475.             ;;
  476.     esac
  477. done
  478. shift $((OPTIND -1))
  479.  
  480. ## Mais testes
  481.  
  482. #padrão é uma página
  483. PAGINAS="${PAGINAS:-1}"
  484.  
  485. #usar opção -f se especificar uma URL
  486. if [[ ${*} = */* ]]; then
  487.     printf 'Link detectado!\r' 1>&2
  488.     FULLOPT=1
  489.     unset ROLLOPT
  490. #pegar só uma página por número
  491. elif [[ ${1} = [0-9]* ]]; then
  492.     printf 'Index detectado!\r' 1>&2
  493.     PAGINAS="${1}"
  494.     ONLYONE=1
  495.     unset ROLLOPT
  496. fi
  497.  
  498. #desmarcar opções incompatíveis
  499. if [[ -n "${ROLLOPT}" ]] && [[ "${PAGINAS}" -gt 1 ]]; then
  500.     PAGINAS=1
  501. fi
  502.  
  503. ## Puxar funções das opções
  504. #opção -f, textos completo
  505. if [[ -n "${FULLOPT}" ]]; then
  506.     linksf "${@}"
  507. #opção -r, anta rolante
  508. elif [[ -n "${ROLLOPT}" ]]; then
  509.     antaroll
  510. #opção de checagem por atualização do script
  511. elif [[ -n "${UPOPT}" ]] ; then
  512.     updatef
  513. else
  514.     #opção padrão, puxar primeira pg e sair
  515.     anta
  516. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement