From ea59f4dc84b14154a1650ef02c162ee03bda69c0 Mon Sep 17 00:00:00 2001 From: yggverse Date: Wed, 26 Jun 2024 15:58:31 +0300 Subject: [PATCH] add gemini-dl, gemtext-php resources --- gemini/gemini-dl/gemini-dl.png | Bin 0 -> 18032 bytes gemini/gemini-dl/index.gmi | 93 +++++++++++++++++++++++++++++++++ gemini/gemtext-php/index.gmi | 78 +++++++++++++++++++++++++++ index.gmi | 4 +- 4 files changed, 173 insertions(+), 2 deletions(-) create mode 100755 gemini/gemini-dl/gemini-dl.png create mode 100755 gemini/gemini-dl/index.gmi create mode 100755 gemini/gemtext-php/index.gmi diff --git a/gemini/gemini-dl/gemini-dl.png b/gemini/gemini-dl/gemini-dl.png new file mode 100755 index 0000000000000000000000000000000000000000..bdb42f4c3786170af833b09dd1c0f2fa4cd969e8 GIT binary patch literal 18032 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 literal 0 HcmV?d00001 diff --git a/gemini/gemini-dl/index.gmi b/gemini/gemini-dl/index.gmi new file mode 100755 index 0000000..c5975ac --- /dev/null +++ b/gemini/gemini-dl/index.gmi @@ -0,0 +1,93 @@ +# gemini-dl + +CLI Batch Downloader for Gemini Protocol, inspired by wget and yt-dlp + +At this moment, project under development, some features already testing + +## Interface + +=> gemini-dl.png + +## Components + +=> https://github.com/YGGverse/gemini-php Client for Gemini protocol +=> https://github.com/YGGverse/gemtext-php Parser for Gemtext +=> https://github.com/YGGverse/net-php Network toolkit for URL operations +=> https://github.com/mikeerickson/php-cli-colors CLI colors + +## Features + +* Grab single URL or --crawl entire capsule +* Multiple MIME types download (e.g. inline images and other media) +* Detailed crawler log for every request + totals +* Flexible options +* Custom --delay between requests +* Custom --index filename for directories +* Custom storage location: Filesystem, FTP +* Optional links replacement for local navigation: relative (default), --absolute or --keep +* --match regex URL +* --unique snap version or sync with existing copy +* Configurable redirect levels to --follow +* Crawl depth --level limit +* Document size limit to download +* Follow --external links on crawl + +## Environment + +``` bash +apt install git composer php-fpm php-mbstring +``` + +## Install + +``` bash +git clone https://github.com/YGGverse/gemini-dl.git +cd gemini-dl +composer update + +# for direct execution only: +chmod +x src/gemini-dl.php +``` + +## Usage + +``` bash +src/gemini-dl.php --source gemini://.. --target /path/to/download +``` + +* alternatively, launch with specified php version: /path/to/php src/gemini-dl.php + +### Options + +``` bash +# Required + +-s, --source - string, gemini protocol address +-t, --target - string, absolute path to destination folder + +# Optional + +-a, --absolute - no value, links to absolute filepath (ignored on --keep), disabled by default +-c, --crawl - no value, crawl document links (entire capsule download), disabled by default +-d, --delay - integer, pause between requests to prevent abuse (seconds), 1 by default +-i, --index - string, index filename of directory listing, index.gmi by default +-h, --help - no value, show available commands +-k, --keep - no value, keep original links (--crawl mode only), disabled by default +-m, --match - string, collect links match regex rule, /.*/ by default +-r, --raw - no value, include meta headers (--keep option ignored), disabled by default +-u, --unique - no value, append snap version as folder timestamp, disabled by default + +# Experimental (in development) + +-e, --external - no value, follow external hosts, disabled by default +-f, --follow - integer, follow redirects on --crawl, 0 by default +-l, --level - integer, depth to --crawl, 0 by default +``` + +* show in CLI: gemini-dl.php --help + +## Download + +=> https://github.com/YGGverse/gemini-dl Source on GitHub +=> https://github.com/YGGverse/gemini-dl/issues Feedback +=> https://github.com/YGGverse/gemini-dl/pull Contributions \ No newline at end of file diff --git a/gemini/gemtext-php/index.gmi b/gemini/gemtext-php/index.gmi new file mode 100755 index 0000000..289b4b9 --- /dev/null +++ b/gemini/gemtext-php/index.gmi @@ -0,0 +1,78 @@ +# gemtext-php + +PHP 8 / Composer Library for Gemtext Operations + +This library is lightweight, object-oriented Gemtext replacement to gemini-php + +## Install + +``` bash +composer require yggverse/gemtext:dev-main +``` + +## Example + +### Parse existing document + +``` php +// Load document from file +$document = new \Yggverse\Gemtext\Document( + file_get_contents( + 'tests/data/document.gmi' + ) +); + +// Get links +foreach ($document->getLinks() as $link) +{ + print( + $link->toString() + ); +} +``` + +### Create new document + +``` php +// Init new document +$document = new \Yggverse\Gemtext\Document; + +// Append header +$document->append( + new \Yggverse\Gemtext\Entity\Header( + 'Hello world' + ) +); + +// Init new link +$link = new \Yggverse\Gemtext\Entity\Link( + 'gemini://geminiprotocol.net', + 'The Gemini Program', + '1965-01-19' +); + +// Change link date +$link->setDate( + date('Y-m-d') +); + +// Append link +$document->append( + $link +); + +// Get gemtext +print( + $document->toString() +); + +// Save to file +file_put_contents( + '/path/to/file.gmi', + $document->toString() +) +``` + +## Download + +=> https://github.com/YGGverse/gemtext-php GitHub \ No newline at end of file diff --git a/index.gmi b/index.gmi index cf23b11..33792a5 100755 --- a/index.gmi +++ b/index.gmi @@ -7,12 +7,12 @@ Open Source Solutions for Yggdrasil Ecosystem ### Gemini => gemini/bdoku/index.gmi β-Doku is DokuWiki Satellite for Gemini Protocol +=> gemini/gemini-dl/index.gmi CLI Batch Downloader for Gemini Protocol => gemini/gemini-php/index.gmi PHP 8 / Composer Library for Gemini Protocol +=> gemini/gemtext-php/index.gmi PHP 8 / Composer Library for Gemtext Operations => gemini/yo/index.gmi Yo! Micro Web Crawler in PHP & Manticore => https://github.com/kevachat/geminiapp KevaChat - Chat in KevaCoin BlockChain => https://github.com/kvazar-network/geminiapp KevaCoin Explorer for Gemini Protocol -=> https://github.com/YGGverse/gemini-dl CLI downloader for Gemini Protocol -=> https://github.com/YGGverse/gemtext-php PHP 8 library for Gemini / Gemtext operations => https://github.com/YGGverse/Pulsar Pulsar - RSS Aggregator for Gemini Protocol => https://github.com/YGGverse/titan-II Titan-II fork with native IPv6 support (archive) => https://github.com/YGGverse/Yoda Yoda is PHP-GTK 3 Browser for Gemini Protocol