Initial commit
This commit is contained in:
commit
53da95395a
|
@ -0,0 +1,40 @@
|
||||||
|
# Sites Roulette
|
||||||
|
|
||||||
|
My simple application to view user pages on a given server,
|
||||||
|
|
||||||
|
curl.php gets the data from the main page of the server, parses it and writes to the database, thanks to cron you can easily update the database for example once a day.
|
||||||
|
|
||||||
|
it's a very simple script, if you want to run it, you need to personalize some things, like the name of your home directory or regex to download users
|
||||||
|
|
||||||
|
to change:
|
||||||
|
|
||||||
|
- public_html/browser/get.php
|
||||||
|
|
||||||
|
- require_once('/home/grizzly/store/browser/db.php');
|
||||||
|
- die(header("Location: https://tilde.team/~grizzly/browser/?member=" . $row['login_name']));
|
||||||
|
|
||||||
|
- public_html/browser/index.php
|
||||||
|
|
||||||
|
- s/tilde.team/you.website/
|
||||||
|
|
||||||
|
- store/browser/curl.php
|
||||||
|
|
||||||
|
- require_once ('/home/grizzly/store/browser/db.php');
|
||||||
|
- curl_setopt($c, CURLOPT_URL,'https://tilde.team/');
|
||||||
|
- preg*match_all('/<li><a href="\/~(.*)\/" class=\"list-group-item col-xs-6 col-sm-4 col-md-2\">~(.\_)<\/a><\/li>/', $data, $matches);
|
||||||
|
|
||||||
|
- store/browser/update.sh
|
||||||
|
|
||||||
|
and add cron.txt content to your cron: `crontab -e`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
the script was created out of "need", I wanted to browse all user pages and I didn't want to open thousands of tabs, so this is "sites roulette".
|
||||||
|
|
||||||
|
you can modify it, share it freely
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
if you want to change or improve something, clone the repo, add changes, upload to some git server and send me the link, if you are a user of tilde.institute, send me an email with the path to your repo on the server
|
||||||
|
|
||||||
|
=> grizzly/at/nand.sh
|
|
@ -0,0 +1,8 @@
|
||||||
|
#minute (0-59),
|
||||||
|
#| hour (0-23),
|
||||||
|
#| | day of the month (1-31),
|
||||||
|
#| | | month of the year (1-12),
|
||||||
|
#| | | | day of the week (0-6 with 0=Sunday).
|
||||||
|
#| | | | | commands
|
||||||
|
|
||||||
|
0 0 * * * /home/grizzly/store/browser/update.sh > /dev/null 2>&1
|
|
@ -0,0 +1,35 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once('/home/grizzly/store/browser/db.php');
|
||||||
|
|
||||||
|
$member = $_GET['member'];
|
||||||
|
|
||||||
|
if (isset($_GET["random"]) || !isset($member)) {
|
||||||
|
$stmt = $db->prepare("SELECT * FROM `websites` ORDER BY RANDOM() LIMIT 1;");
|
||||||
|
$stmt->execute();
|
||||||
|
$row = $stmt->fetch();
|
||||||
|
|
||||||
|
die(header("Location: https://tilde.team/~grizzly/browser/?member=" . $row['login_name']));
|
||||||
|
} else {
|
||||||
|
$stmt = $db->prepare("SELECT * FROM `websites` WHERE login_name = :login_name;");
|
||||||
|
$stmt->execute(array(':login_name' => $member));
|
||||||
|
$row = $stmt->fetch(); // works
|
||||||
|
|
||||||
|
$stmt = $db->prepare("SELECT login_name FROM `websites` WHERE id > :id;");
|
||||||
|
$stmt->execute(array(':id' => $row['id']));
|
||||||
|
$next = $stmt->fetch(); // works
|
||||||
|
|
||||||
|
$stmt = $db->prepare("SELECT login_name FROM `websites` WHERE id < :id;");
|
||||||
|
$stmt->execute(array(':id' => $row['id']));
|
||||||
|
$prev = $stmt->fetch(); // always return first record from database, why?
|
||||||
|
}
|
||||||
|
|
||||||
|
$current = $row["login_name"];
|
||||||
|
$next = $next["login_name"] ? $next["login_name"] : null;
|
||||||
|
$prev = $prev["login_name"] ? $prev["login_name"] : null;
|
||||||
|
|
||||||
|
// echo "current: " . $current . "\n";
|
||||||
|
// echo "next: " . $next . "\n";
|
||||||
|
// echo "prev: " . $prev . "\n";
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,87 @@
|
||||||
|
<?php require_once ('get.php');
|
||||||
|
?><!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Members websites on tilde.team</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="app">
|
||||||
|
<div class="view">
|
||||||
|
<iframe
|
||||||
|
src="https://tilde.team/~<?=$current?>"
|
||||||
|
frameborder="0"
|
||||||
|
></iframe>
|
||||||
|
</div>
|
||||||
|
<div class="control">
|
||||||
|
<div>
|
||||||
|
you are viewing
|
||||||
|
<a href="https://tilde.team/~<?=$current?>" target="_blank"
|
||||||
|
><?=$current?></a
|
||||||
|
>
|
||||||
|
site
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<?php if (isset($prev)) { ?>
|
||||||
|
<a href="https://tilde.team/~grizzly/browser/?member=<?=$prev?>"
|
||||||
|
>[previous]</a
|
||||||
|
>
|
||||||
|
<?php } ?>
|
||||||
|
<a href="https://tilde.team/~grizzly/browser/?random">[random]</a>
|
||||||
|
<?php if (isset($next)) { ?>
|
||||||
|
<a href="https://tilde.team/~grizzly/browser/?member=<?=$next?>"
|
||||||
|
>[next]</a
|
||||||
|
>
|
||||||
|
<?php } ?>
|
||||||
|
</div>
|
||||||
|
<div class="cache">user list cache is updated once a day</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font-family: "lucida sans unicode", "lucida grande", sans-serif;
|
||||||
|
line-height: 1.7;
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: #0e0e0e;
|
||||||
|
}
|
||||||
|
.app {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
.view {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex-grow: 1;
|
||||||
|
border: 5px dotted #3ee77b;
|
||||||
|
}
|
||||||
|
iframe {
|
||||||
|
flex-grow: 1;
|
||||||
|
background-color: #cecece;
|
||||||
|
}
|
||||||
|
.control {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
border-top: 5px dotted #3ee77b;
|
||||||
|
padding: 10px;
|
||||||
|
color: #3ee77b;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.control a {
|
||||||
|
color: #99f2b9;
|
||||||
|
}
|
||||||
|
.cache {
|
||||||
|
font-size: 10px;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once ('/home/grizzly/store/browser/db.php');
|
||||||
|
|
||||||
|
$c = curl_init();
|
||||||
|
curl_setopt($c, CURLOPT_URL,'https://tilde.team/');
|
||||||
|
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
$data = curl_exec($c);
|
||||||
|
curl_close($c);
|
||||||
|
|
||||||
|
preg_match_all('/<li><a href="\/~(.*)\/" class=\"list-group-item col-xs-6 col-sm-4 col-md-2\">~(.*)<\/a><\/li>/', $data, $matches);
|
||||||
|
|
||||||
|
foreach ($matches[1] as $user) {
|
||||||
|
$stmt = $db->prepare("INSERT INTO `websites` (login_name) VALUES(:login_name)");
|
||||||
|
$stmt->bindParam(':login_name', $user);
|
||||||
|
$stmt->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$db = new PDO('sqlite:db_websites.sqlite3');
|
||||||
|
|
||||||
|
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
|
|
||||||
|
$query = "CREATE TABLE IF NOT EXISTS websites
|
||||||
|
(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
login_name TEXT
|
||||||
|
)";
|
||||||
|
|
||||||
|
$db->exec($query);
|
||||||
|
|
||||||
|
function cleanText($value) {
|
||||||
|
$value = strip_tags($value);
|
||||||
|
$value = htmlentities($value, ENT_QUOTES, "UTF-8");
|
||||||
|
$value = trim($value);
|
||||||
|
$value = stripslashes($value);
|
||||||
|
$value = strval($value);
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
rm /home/grizzly/store/browser/db_websites.sqlite3;
|
||||||
|
php /home/grizzly/store/browser/curl.php;
|
Loading…
Reference in New Issue