123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="generator" content="pandoc">
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
- <title></title>
- <style type="text/css">code{white-space: pre;}</style>
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link rel="stylesheet" href="github-markdown.css">
- </head>
- <body>
- <h3 id="download-css-styles-for-shaarlis-listed-in-an-opml-file">Download CSS styles for shaarlis listed in an opml file</h3>
- <p>Example php script:</p>
- <pre><code><!---- ?php -->
- <!---- Copyright (c) 2014 Nicolas Delsaux (https://github.com/Riduidel) -->
- <!---- License: zlib (http://www.gzip.org/zlib/zlib_license.html) -->
- /**
- * Source: https://github.com/Riduidel
- * Download css styles for shaarlis listed in an opml file
- */
- define("SHAARLI_RSS_OPML", "https://www.ecirtam.net/shaarlirss/custom/people.opml");
- define("THEMES_TEMP_FOLDER", "new_themes");
- if(!file_exists(THEMES_TEMP_FOLDER)) {
- mkdir(THEMES_TEMP_FOLDER);
- }
- function siteUrl($pathInSite) {
- $indexPos = strpos($pathInSite, "index.php");
- if(!$indexPos) {
- return $pathInSite;
- } else {
- return substr($pathInSite, 0, $indexPos);
- }
- }
- function createShaarliHashFromOPMLL($opmlFile) {
- $result = array();
- $opml = file_get_contents($opmlFile);
- $opmlXml = simplexml_load_string($opml);
- $outlineElements = $opmlXml->xpath("body/outline");
- foreach($outlineElements as $site) {
- $siteUrl = siteUrl((string) $site['htmlUrl']);
- $result[$siteUrl]=((string) $site['text']);
- }
- return $result;
- }
- function getSiteFolder($url) {
- $domain = parse_url($url, PHP_URL_HOST);
- return THEMES_TEMP_FOLDER."/".str_replace(".", "_", $domain);
- }
- function get_http_response_code($theURL) {
- $headers = get_headers($theURL);
- return substr($headers[0], 9, 3);
- }
- /**
- * This makes the code PHP-5 only (particularly the call to "get_headers")
- */
- function copyUserStyleFrom($url, $name, $knownStyles) {
- $userStyle = $url."inc/user.css";
- if(in_array($url, $knownStyles)) {
- // TODO add log message
- } else {
- $statusCode = get_http_response_code($userStyle);
- if(intval($statusCode)<300) {
- $styleSheet = file_get_contents($userStyle);
- $siteFolder = getSiteFolder($url);
- if(!file_exists($siteFolder)) {
- mkdir($siteFolder);
- }
- if(!file_exists($siteFolder.'/user.css')) {
- // Copy stylesheet
- file_put_contents($siteFolder.'/user.css', $styleSheet);
- }
- if(!file_exists($siteFolder.'/README.md')) {
- // Then write a readme.md file
- file_put_contents($siteFolder.'/README.md',
- "User style from ".$name."\n"
- ."============================="
- ."\n\n"
- ."This stylesheet was downloaded from ".$userStyle." on ".date(DATE_RFC822)
- );
- }
- if(!file_exists($siteFolder.'/config.ini')) {
- // Write a config file containing useful informations
- file_put_contents($siteFolder.'/config.ini',
- "site_url=".$url."\n"
- ."site_name=".$name."\n"
- );
- }
- if(!file_exists($siteFolder.'/home.png')) {
- // And finally copy generated thumbnail
- $homeThumb = $siteFolder.'/home.png';
- file_put_contents($siteFolder.'/home.png', file_get_contents(getThumbnailUrl($url)));
- }
- echo 'Theme have been downloaded from <a href="'.$url.'">'.$url.'</a> into '.$siteFolder
- .'. It looks like <img src="'.$homeThumb.'"><br/>';
- }
- }
- }
- function getThumbnailUrl($url) {
- return 'http://api.webthumbnail.org/?url='.$url;
- }
- function copyUserStylesFrom($urlToNames, $knownStyles) {
- foreach($urlToNames as $url => $name) {
- copyUserStyleFrom($url, $name, $knownStyles);
- }
- }
- /**
- * Reading directory list, courtesy of http://www.laughing-buddha.net/php/dirlist/
- * @param directory the directory we want to list files of
- * @return a simple array containing the list of absolute file paths. Notice that current file (".") and parent one("..")
- * are not listed here
- */
- function getDirectoryList ($directory) {
- $realPath = realpath($directory);
- // create an array to hold directory list
- $results = array();
- // create a handler for the directory
- $handler = opendir($directory);
- // open directory and walk through the filenames
- while ($file = readdir($handler)) {
- // if file isn't this directory or its parent, add it to the results
- if ($file != "." && $file != "..") {
- $results[] = realpath($realPath . "/" . $file);
- }
- }
- // tidy up: close the handler
- closedir($handler);
- // done!
- return $results;
- }
- /**
- * Start in themes folder and look in all subfolders for config.ini files.
- * These config.ini files allow us not to download styles again and again
- */
- function findKnownStyles() {
- $result = array();
- $subFolders = getDirectoryList("themes");
- foreach($subFolders as $folder) {
- $configFile = $folder."/config.ini";
- if(file_exists($configFile)) {
- $iniParameters = parse_ini_file($configFile);
- array_push($result, $iniParameters['site_url']);
- }
- }
- return $result;
- }
- $knownStyles = findKnownStyles();
- copyUserStylesFrom(createShaarliHashFromOPMLL(SHAARLI_RSS_OPML), $knownStyles);
- <!--- ? ----></code></pre>
- </body>
- </html>
|