-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.php
106 lines (82 loc) · 3.24 KB
/
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
// phpcs:ignoreFile PSR1.Files.SideEffects.FoundWithSymbols
require_once 'vendor/autoload.php';
use MLEncontraLinkNãoPatrocinado\EncontraLink;
use MLEncontraLinkNãoPatrocinado\Exceções\LinkNãoEncontrado;
use MLEncontraLinkNãoPatrocinado\Exceções\PreçosNãoEncontrados;
use Sabre\Event\EventEmitter;
header('Content-type: text/html; charset=utf-8');
header('X-Accel-Buffering: no');
ini_set('output_buffering', false);
if (!isset($_POST['pagina'])) {
?>
<div>
<h1 style="text-align: center;">Procurar anúncios não patrocinados no Mercado Livre</h1>
<form action="." method="POST" style="text-align: center;">
<p>
Insira o link de uma pesquisa ordenada pelo menor preço:
</p>
<p>
<input type="text" name='pagina' size=90 style="max-width: 100%"></input>
</p>
<p>
<input type="submit" value='Procurar'>
</p>
</form>
<hr />
<h3>Explicação</h3>
<p>
O mercado livre coloca anúncios não premium (gratuitos) com menor prioridade.
Se ordenamos uma pesquisa pelo menor preço, encontramos esses anúncios
não patrocinados apenas ao passar por todos os anúncios premium,
sendo assim difícil identificar todas as possíveis ofertas.
</p>
<p>
Esta ferramenta foi desenvolvida para navegar por todas as páginas ordenadas por custo
crescente até encontrar a primeira que possui tais anúncios não patrocinados.
</p>
<p style="color: darkred;">
Limitações: O mercado livre só aceita até 40 páginas de resultados.
Buscas muito genéricas provavelmente demorarão mais e não encontrarão a
primeira página não patrocinada.
</p>
<p>Exemplo:</p>
<p><img src='./exemplo.jpg' width='500' /></p>
<p><a href='https://github.com/jonasof/ml-naopatrocinado'>Código Fonte</a></p>
</div>
<?php
} else {
$event_emitter = new EventEmitter();
$encontra_link = new EncontraLink($event_emitter);
echo '<h1 style="text-align: center;">Procurar anúncios não patrocinados no Mercado Livre</h1>';
echo "<p><a href='.'>Voltar</a></p>";
echo "<h2>Procurando link...</h2> ";
if (!validarLink($_POST['pagina'])) {
exit();
}
try {
$event_emitter->on('próxima_pagina', function ($página) {
echo "$página, ";
ob_flush();
flush();
});
$pagina = $encontra_link->encontra($_POST['pagina']);
echo "<h2 style='color: darkgreen;'>Página encontrada: $encontra_link->página</h2>";
echo "<p><a href='$pagina' noreferrer noopener>$pagina</a></p>";
} catch (LinkNãoEncontrado | PreçosNãoEncontrados $e) {
echo $e->getMessage();
}
}
function validarLink($link) : bool
{
if (!filter_var($_POST['pagina'], FILTER_VALIDATE_URL)) {
echo "O texto inserido não é um link";
return false;
}
$parsed = parse_url($link);
if (strstr($parsed['host'], 'mercadolivre') === false) {
echo "O link inserido não parece ser do mercado livre";
return false;
}
return true;
}