PiStar Information Scraper & Display for PHP

Jay Moore 3c155d5727 Update README, again. 4 months ago
LICENSE e9381cd020 Initial commit. 4 months ago
README.md 3c155d5727 Update README, again. 4 months ago
hotspots.php e9381cd020 Initial commit. 4 months ago
hotspots.sh 5f72aaeda8 Add comments. Fix README. 4 months ago

README.md

Pi-Star Information Scraper & Display

This lazily named pair of scripts will allow you to display DStar or DMR information using PHP.

About

I got the bright idea that I wanted to display my hotspot status information on my QRZ page. Like most things ham; it doesn't look nice. It's a no frills php page that just drops text in a table with basic formatting. I go about as far as using viewport information to make it look better in various framesizes. It was designed to be placed in an iFrame.

This script has not seen any updates in months due to working how I wanted it to and not causing issues. In fact I forgot it was working until going to make this repository.

Example

I tried to try to ebed an iFrame in the readme.

But it doesn't work. But you can visit:

https://nq4t.com/?page_id=1299

It not only shows a live implmentation; but several using different methods of running PHP and/or script.

Usage/Setup

To use this you must meet the following conditions:

You must have a web-server running PHP
You must be able to execute local shell scripts
Your web-server must be able to access your hotspot dashboard
-or- 
Your server needs SSH to a machine that can talk to dashboards.

You will need to load hotspot.sh and edit the hostname information. You will also need to configure if you're using D-Star or DMR. DMR scrapes the bm_links.php while Dstar scrapes repeaterinfo.php's "Linked To" box. It currently looks specifically for D-Star prefixes. If you're using YSF then you need to modify the script or wait for me to support it.

Place hotspots.php in a document root and edit it to match where you put your shell script. Simply loading hotspots.php is all you need to do.

It is entirely possible to run this on a web-server outside of your network with some additional tinkering. One way is make your hotspot dashboard public and accessible over the internet. If you don't want to do that then it is possible to execute the shell script remotely:

dewdude@pickmy:~# ssh -p [REDACTED] dewdude@qth.nq4t.com 'bash -s < /home/dewdude/pistarscrape/hotspots.sh'
<tr><td style="vertical-align: top; font-family: Verdana; font-weight: bold; text-align: right;"><small>BM TG:</small></td>
<td style="vertical-align: top;"><small style="font-style: italic;">#3151 - #8802 - #31514 - #98003 </small><br></td></tr>

I told my remote VPS to make an SSH connection to home and execute the script. It executed, sent output, and terminated the SSH connection. Nothing cares if you use VPN to scrape dashboards or remote SSH. Just as long as the bash script can talk to the dashboard and the PHP gets that output from the script. You could bounce it around numerous VPNs and relays and it'd be fine.

Testing/Troubleshooting

You can easily test both parts of this script to check that the output is sane and for debugging purposes. When you run the bash script by itself, you will get output like this:

dewdude@ovh:/media/html/qth-nq4t$ ./hotspot13alpha.sh
<tr><td style="vertical-align: top; font-family: Verdana; font-weight: bold; text-align: right;"><small>BM TG:</small></td>
<td style="vertical-align: top;"><small style="font-style: italic;">#3151 - #8802 - #31514 - #98003 </small><br></td></tr>

The bash script literally just generates HTML code; but it's still clear that it's outputting talkgroup numbers. The PHP file, hotspots.php, basically generates an entire webpage.

dewdude@ovh:/media/html/qth-nq4t$ php hotspots.php
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NQ4T Hotspot Info</title>
</head>
<body>
<div style="margin-right: auto; font-family: Verdana; text-align: left;"><big>
</big><small><span style="font-weight: bold;">NQ4T Pi-Star Hotspot
Network</span><br>
<br style="font-weight: bold; font-style: italic;">
<span style="font-weight: bold; font-style: italic;">Current
Connections:</span><br>
</small><big>
</big>
<table
style="border: 1px solid black; text-align: left; border-collapse: collapse;"
cellpadding="2" cellspacing="0">
<tbody>
<tr><td style="vertical-align: top; font-family: Verdana; font-weight: bold; text-align: right;"><small>BM TG:</small></td>
<td style="vertical-align: top;"><small style="font-style: italic;">#3151 - #8802 - #31514 - #98003 </small><br></td></tr>
</tbody>
</table>
<big>
</big><small><br style="font-style: italic; font-weight: bold;">
<span style="font-style: italic; font-weight: bold;">Listed connections
do not mean I have a radio on or am at a radio.<br>This is especially true
for Brandmeister.</span><br
style="font-weight: bold; font-style: italic;">
<span style="font-style: italic; font-weight: bold;"> For informational
purposes only.
</span><br>
<br>
73 de NQ4T
<br>
2022-05-09 @ 05:42:43z</small>
</div>
</body>
</html>

As you can see between <tbody> and </tbody> is our script output.

If the bash script doesn't get data or can't connect, it will just hang for a while and output nothing. If PHP can't execute the script, it will generate an error in the output.

History

09-MAY-2022 - Initial Commit

License

Pi-Star Information Scraper & Display
Copyright (C) 2022 Jay Moore - nq4tango@gmail.com

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.