Linux sob crond aplicação regular de impulso arquivo de notificação de rede campus PHP

prefácio

A outra noite no chuveiro, shampoo para lavar metade, mas ainda sem água! Espuma não descarga!
Mais tarde, percebi que a rede do campus antes do dia emitiu um aviso sem água, mas muito raramente devida atenção à notificação de rede campus, além da equipe não fez frente a notificação, resultando em esta coisa acontecer.
Então, eu queria escrever uma tarefas regulares, olhar para a nova notificação push -

processo de implementação

  1. Use sunra/php-simple-html-dom-parserdesenvolvimento, fonte de análise campus página de notificação de rede, encontrou uma nova notificação, mensagens de envio através do número de público (pode ser mail, etc.)
  2. Use croncomo uma tarefa regular

As etapas detalhadas

  1. Em primeiro lugar Instalação compositor sunra/php-simple-html-dom-parser
  2. Então você pode ver SunRa no diretório vender, uso direto no arquivo é usado
use Sunra\PhpSimple\HtmlDomParser;
  1. Em seguida pode ser encontrada na documentação oficial da expansão das operações de
    documentos oficiais
  2. Na obtenção do site de origem ao usar file_get_html: quando ( 'http // xxxx'), sendo dado!

file_get_contents () fluxo não suporta busca

Encontre informações mais tarde soube que o arquivo remoto não suporta buscar (offset). Tente encontrar um arquivos não-locais podem usar um deslocamento pequeno, mas é imprevisível, como ele se aplica ao fluxo de buffer.

O que você pode fazer é usar substr quando você recupera o conteúdo da página:

p uma r t = s em b s t r ( parte = substr ( nome, 849, 32);

Mas então eu re-uso str_get_html ($ str) directamente após fonte de onda;. . . .

  1. Inicialmente, ele é escrito para a lista de notificação rastreamento primeira vez, arrastando o primeiro aviso, em seguida, gravados no arquivo, e empurrar. Cada rastreamento posterior após o primeiro são escritos para o arquivo e se a comparação é consistente, inconsistente a mensagem de envio e, em seguida, atualizar o arquivo. .
    Mais tarde descobriu que algum aviso é top! E há uma outra possível após o topo unstuck, em suma, pode não apenas determinar o primeiro.
    Segundo Após a observação, que só vai enviar um máximo de dois por dia aviso, além da primeira posição, depois de quatro ciclos antes do aviso prévio deve ser capaz de subir.
    Em seguida, rastreamento e arquivo de verificação se estes já existem, existe ignorado, não está presente na gravação adicional para o arquivo e, em seguida, as notificações push.
use APP\Untis\WeChatSDK;
use Sunra\PhpSimple\HtmlDomParser;
    /**
     * 分析源码
     * 
     * @return int|string
     */
     public function school() {
		$url = "http://xxxx";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //保存在变量中,而不是直接输出

        $html = curl_exec($ch);
        if(curl_errno($ch)) {
            return curl_errno($ch);
        }
        curl_close($ch);

        $dom = HtmlDomParser::str_get_html($html);
        $path = base_path().'/config/school.txt';
        $oldLinks = file_get_contents($path);

        for($i=0; $i<4; $i++) {
            $link = $dom->find('ul', 2)->find('li', $i)->find('a', 0)->href;
            $title = $dom->find('ul',2)->find('li', $i)->find('a', 0)->title;

            if(!strstr($oldLinks, $link)) {
                $oldLinks = $oldLinks.','.$link;
                file_put_contents($path, $oldLinks);
                $link = 'http://xxx/'.$link;
                $this->schoolPush($link, $title); 
            } 
        }
        $dom->clear();
    }
    
    /**
     * 推送新通知
     * 
     * @param $link
     * @param $title
     * @return mixed
     */
     private function schoolPush($link, $title)
    {
        $data = config('school_account'); //待推送人的openid
        foreach ($data as $datum) {
            if(!empty($datum)) {
                $sdk = new WeChatSDK(); //封装好的sdk,我这里直接调用了
                $openid = $datum;
                $tplMask = 'xxxx';
                $url = $link;
                $arr = [
                    'first' => array(
                        'value' => '校园网新通知来啦~',
                        'color' => '#FF0000'
                    ),
                    'keyword1'  => array(
                        'value' => $title,
                        'color' => '#3CB371'
                    ),
                    'keyword2'  => array(
                        'value' => $link,
                        'color' => '#FF0000'
                    ),
                    'keyword3'  => array(
                        'value' => '? ? ? ?',
                        'color' => '#FF0000'
                    ),
                    'remark'    => array(
                        'value' => '点击跳转到校园网该通知噢~',
                        'color' => '#FF0000'
                    )
                ];
                $result = $sdk->sendTplMessage($openid, $tplMask, $arr, $url);
            }
        }
        return $result;
    }
  1. O acesso cronometrado definir tarefa
//进入cron编写状态
crontab -e 

//下面这里的五个星号分别代表了分、时、日、月、周,具体请百度相关的语法;后面的url链接更换为相应的链接即可。
//我这里设置了 每15 分钟执行一次
*/15 * * * * /usr/bin/curl http:// www.xxx.cn/school

Aqui Insert Picture Descrição
Salvá-lo, você precisa economizar service crond restartpara reiniciar a tarefa
crontab -l tarefas vista, crontab -rtarefas de exclusão

7. Resultados push
Aqui Insert Picture Descrição

Publicado 48 artigos originais · ganhou elogios 56 · vê 20000 +

Acho que você gosta

Origin blog.csdn.net/zhetmdoubeizhanyong/article/details/100155139
Recomendado
Clasificación