Linux bajo Crond aplicación regular de archivo de notificaciones push de red del campus PHP

prefacio

La otra noche, en la ducha, champú para lavar la mitad, pero todavía sin agua! La espuma no se podía tirar!
Más tarde me di cuenta de que la red del campus antes del día ha emitido un aviso sin agua, pero muy rara vez la debida atención a la notificación de la red del campus, además de la escuadra no remitió la notificación, lo que resulta en esto suceda.
Así que quería escribir unas tareas regulares, mira la nueva notificación de inserción -

proceso de implementación

  1. Uso sunra/php-simple-html-dom-parserde desarrollo, fuente de análisis de página de notificación de la red del campus, se encontró una nueva notificación, a través de mensajes de inserción número público (puede ser electrónico, etc.)
  2. Utilizar croncomo una tarea periódica

pasos detallados

  1. En primer lugar de instalación compositor sunra/php-simple-html-dom-parser
  2. A continuación se puede ver en el directorio SunRa vendedor, el uso directo en el archivo se utiliza
use Sunra\PhpSimple\HtmlDomParser;
  1. A continuación se puede encontrar en la documentación oficial de la expansión de las operaciones de
    los documentos oficiales
  2. En la obtención del sitio de origen cuando se utiliza file_get_html: cuando ( 'http // xxxx'), siendo dado!

file_get_contents () corriente no es compatible con la búsqueda

Encontrar información más tarde se enteró de que el archivo remoto no admite buscan (offset). Tratar de encontrar una archivos no locales puedan tener acceso a un desplazamiento pequeño, pero es impredecible, ya que está relacionada con el flujo de amortiguamiento.

Lo que puede hacer es utilizar substr al recuperar el contenido de la página:

pag una r t = s en si s t r ( parte = substr ( nombre, 849, 32);

Pero entonces me re-uso str_get_html ($ str) directamente después de fuente de rizo;. . . .

  1. Inicialmente está escrito para la lista de notificaciones de rastreo primera vez, arrastrándose el primer aviso, a continuación, escrito en el archivo, y empuje. Cada rastreo posterior después de la primera se escriben en el archivo y si la comparación es consistente, inconsistente mensaje de inserción, y luego actualizar el archivo. .
    Más tarde descubrió que algún aviso es de primera! Y hay otro posible después de la parte superior del atasco, en definitiva, puede no sólo determinar la primera.
    Según Después de la observación, de que sólo enviará un máximo de dos por día de anticipación, además de la primera posición, luego cuatro ciclos antes de la notificación debería ser capaz de subir.
    A continuación, el rastreo y el archivo de comprobar si estos ya existen, que existe saltado, no está presente en la escritura adicional para el archivo, y luego notificaciones 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. El conjunto de tareas de acceso temporizado
//进入cron编写状态
crontab -e 

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

Aquí Insertar imagen Descripción
Guardar ella, necesita ahorrar service crond restartpara reiniciar la tarea
crontab -l ver las tareas, crontab -rlas tareas de eliminación

7. Resultados de empuje
Aquí Insertar imagen Descripción

Publicado 48 artículos originales · ganado elogios 56 · Vistas a 20000 +

Supongo que te gusta

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