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
- Use
sunra/php-simple-html-dom-parser
desenvolvimento, 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.) - Use
cron
como uma tarefa regular
As etapas detalhadas
- Em primeiro lugar Instalação compositor
sunra/php-simple-html-dom-parser
- Então você pode ver SunRa no diretório vender, uso direto no arquivo é usado
use Sunra\PhpSimple\HtmlDomParser;
- Em seguida pode ser encontrada na documentação oficial da expansão das operações de
documentos oficiais - 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:
nome, 849, 32);
Mas então eu re-uso str_get_html ($ str) directamente após fonte de onda;. . . .
- 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;
}
- O acesso cronometrado definir tarefa
//进入cron编写状态
crontab -e
//下面这里的五个星号分别代表了分、时、日、月、周,具体请百度相关的语法;后面的url链接更换为相应的链接即可。
//我这里设置了 每15 分钟执行一次
*/15 * * * * /usr/bin/curl http:// www.xxx.cn/school
Salvá-lo, você precisa economizar service crond restart
para reiniciar a tarefa
crontab -l
tarefas vista, crontab -r
tarefas de exclusão
7. Resultados push