working
This commit is contained in:
commit
69de9f49dc
5 changed files with 192 additions and 0 deletions
65
assets/style.css
Normal file
65
assets/style.css
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: #141415;
|
||||||
|
font-family: 'Liberation Mono', monospace;
|
||||||
|
color: #cdcdcd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview, .box {
|
||||||
|
padding: 10px;
|
||||||
|
margin-top: 10px;
|
||||||
|
background-color: #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
max-width: 700px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #aac;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #cdcdcd;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 a::before {
|
||||||
|
content: "#";
|
||||||
|
color: #aac;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
h1 a:hover::before {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.preview h1 {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.search-container input[type=text] {
|
||||||
|
padding: 6px;
|
||||||
|
margin-top: 3px;
|
||||||
|
font-size: 17px;
|
||||||
|
color: #cdcdcd;
|
||||||
|
background: #333;
|
||||||
|
border: 0;
|
||||||
|
width: calc(100% - 60px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-container button {
|
||||||
|
padding: 6px 10px;
|
||||||
|
margin-top: 3px;
|
||||||
|
background: #333;
|
||||||
|
float: right;
|
||||||
|
font-size: 17px;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
color:#cdcdcd;
|
||||||
|
}
|
||||||
|
|
42
crawl.php
Normal file
42
crawl.php
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
ini_set('display_errors', '1');
|
||||||
|
ini_set('display_startup_errors', '1');
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
$db = new PDO("sqlite:db.sqlite");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
|
||||||
|
//$stmt = $db->prepare($sql);
|
||||||
|
//$stmt->execute($params);
|
||||||
|
|
||||||
|
function page_title($fp) {
|
||||||
|
$res = preg_match("/<title>(.*)<\/title>/siU", $fp, $title_matches);
|
||||||
|
if (!$res)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Clean up title: remove EOL's and excessive whitespace.
|
||||||
|
$title = preg_replace('/\s+/', ' ', $title_matches[1]);
|
||||||
|
$title = trim($title);
|
||||||
|
return $title;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$arg = $argv;
|
||||||
|
array_shift($arg);
|
||||||
|
|
||||||
|
foreach ($arg as $url) {
|
||||||
|
$file = file_get_contents($url);
|
||||||
|
if (!$file)
|
||||||
|
continue;
|
||||||
|
$title = page_title($file);
|
||||||
|
$document = preg_replace('/[ \t]+/', ' ', preg_replace('/[\r\n]+/', "", strip_tags($file)));
|
||||||
|
if (!$title || !$document)
|
||||||
|
continue;
|
||||||
|
echo $title;
|
||||||
|
echo $document;
|
||||||
|
$stmt = $db->prepare('INSERT INTO indexed (title, url, content) VALUES (?, ?, ?)');
|
||||||
|
$stmt->execute([$title, $url, $document]);
|
||||||
|
}
|
2
create.php
Normal file
2
create.php
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
CREATE TABLE indexed (id INTEGER PRIMARY KEY, title VARCHAR(255), url VARCHAR(512), content TEXT)
|
||||||
|
|
80
index.php
Normal file
80
index.php
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<?php
|
||||||
|
ini_set('display_errors', '1');
|
||||||
|
ini_set('display_startup_errors', '1');
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
?>
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html lang="en">
|
||||||
|
<link rel="stylesheet" type="text/css" href="assets/style.css">
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<meta name="description" content="a search engine">
|
||||||
|
<title>searpl</title>
|
||||||
|
|
||||||
|
<div class='wrapper'>
|
||||||
|
<h1>searpl</h1>
|
||||||
|
|
||||||
|
<div class='box search-container'>
|
||||||
|
<form action="./">
|
||||||
|
<input type="text" placeholder="Search.." name="q" value="<?php if (isset($_GET['q'])) {echo htmlspecialchars($_GET['q']); } ?>">
|
||||||
|
<button type="submit"><i class="fa fa-search"></i></button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if (isset($_GET['q']) && preg_replace('/\s+/', '', $_GET['q']) != '') {
|
||||||
|
$db = new PDO("sqlite:db.sqlite");
|
||||||
|
|
||||||
|
$sql = 'SELECT * FROM indexed WHERE 1=1';
|
||||||
|
|
||||||
|
$terms = explode(' ', preg_replace('/\s+/', '', $_GET['q']));
|
||||||
|
$params = array();
|
||||||
|
foreach ($terms as $term) {
|
||||||
|
if (substr($term, 0, 1) == '-') {
|
||||||
|
|
||||||
|
$sql = $sql . ' AND content NOT LIKE ?';
|
||||||
|
array_push($params,'%'.substr($term,1).'%');
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$sql = $sql . ' AND content LIKE ?';
|
||||||
|
array_push($params,'%'.$term.'%');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$sql = $sql . ';';
|
||||||
|
|
||||||
|
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
|
||||||
|
$stmt = $db->prepare($sql);
|
||||||
|
$stmt->execute($params);
|
||||||
|
|
||||||
|
$results = false;
|
||||||
|
while ($row = $stmt->fetch()) {
|
||||||
|
$results = true;
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class='box'>
|
||||||
|
<a href="<?php echo htmlspecialchars($row['url']); ?>"><?php echo htmlspecialchars($row['title']); ?></a>
|
||||||
|
<br>
|
||||||
|
...<?php
|
||||||
|
$content = $row['content'];
|
||||||
|
foreach ($terms as $param) {
|
||||||
|
$pos = strpos($content, $param);
|
||||||
|
if ($pos !== false) {
|
||||||
|
echo htmlspecialchars(substr($content,$pos-50,50));
|
||||||
|
echo '<strong>'.htmlspecialchars($param).'</strong>';
|
||||||
|
echo htmlspecialchars(substr($content,$pos+strlen($param),50)).'...';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
if (!$results)
|
||||||
|
echo '<div class="box">No results.</div>';
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
|
3
urls.sh
Executable file
3
urls.sh
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
wget --spider --force-html -r -l2 -H $@ 2>&1 \
|
||||||
|
| grep '^--' | awk '{ print $3 }' \
|
||||||
|
| grep -v '\.\(css\|js\|png\|gif\|jpg\)$'
|
Loading…
Reference in a new issue