function createAutoblog($type, $sitename, $siteurl, $rssurl) { if ($type == 'generic' || empty($type)) { $var = updateType($siteurl); $type = $var['type']; if (!empty($var['name'])) { if (!stripos($siteurl, $var['name'] === false)) { $sitename = ucfirst($var['name']) . ' - ' . $sitename; } } } if (folderExists($siteurl, $rssurl)) { throw new Exception('Erreur : l\'autoblog ' . $sitename . ' existe déjà.'); } $foldername = urlToFolder($siteurl, $rssurl); if (mkdir($foldername, 0755, false)) { $fp = fopen($foldername . '/index.php', 'w+'); if (!fwrite($fp, "<?php require_once '../autoblog.php'; ?>")) { throw new Exception('Impossible d\'écrire le fichier index.php'); } fclose($fp); $fp = fopen($foldername . '/vvb.ini', 'w+'); if (!fwrite($fp, '[VroumVroumBlogConfig] SITE_TYPE="' . $type . '" SITE_TITLE="' . $sitename . '" SITE_DESCRIPTION="Site original : <a href=\'' . $siteurl . '\'>' . $sitename . '</a>" SITE_URL="' . $siteurl . '" FEED_URL="' . $rssurl . '" ARTICLES_PER_PAGE="' . getArticlesPerPage($type) . '" UPDATE_INTERVAL="' . getInterval($type) . '" UPDATE_TIMEOUT="' . getTimeout($type) . '"')) { throw new Exception('Impossible d\'écrire le fichier vvb.ini'); } fclose($fp); } else { throw new Exception('Impossible de créer le répertoire.'); } updateXML('new_autoblog_added', 'new', $foldername, $sitename, $siteurl, $rssurl); unlink(AUTOBLOGS_CACHE_FILENAME); }
function xsafimport($xsafremote, $max_exec_time) { if (DEBUG) { echo "\n*Traitement {$xsafremote} en maximum {$max_exec_time} secondes"; } $max_exec_time += time() - 1; // -1 car l'import prend environ 1 seconde /* détection de ferme autoblog */ $json_import = file_get_contents($xsafremote); if (!empty($json_import)) { $to_update = array(); $json_import = json_decode($json_import, true); if (!isset($json_import['meta']) || !isset($json_import['meta']['xsaf-version']) || $json_import['meta']['xsaf-version'] != XSAF_VERSION) { if (DEBUG) { echo "\nxsaf-version différentes !"; } return false; } $get_remote_db = $json_import['meta']['xsaf-db_transfer'] == "true" ? true : false; $get_remote_media = $json_import['meta']['xsaf-media_transfer'] == "true" ? true : false; if (!empty($json_import['autoblogs'])) { foreach ($json_import['autoblogs'] as $remote_folder => $value) { if (DEBUG) { debug('remote = ' . $remote_folder); } if (count($value) == 4 && !empty($value['SITE_TYPE']) && !empty($value['SITE_TITLE']) && !empty($value['SITE_URL']) && !empty($value['FEED_URL'])) { $sitetype = escape($value['SITE_TYPE']); $sitename = escape($value['SITE_TITLE']); $siteurl = escape($value['SITE_URL']); // Do not use DetectRedirect because it's slow and it has been used when the feed was added //$rssurl = DetectRedirect(escape($value['FEED_URL'])); $rssurl = escape($value['FEED_URL']); } /* TOO SLOW $xml = simplexml_load_file($rssurl); // quick feed check // ATOM feed && RSS 1.0 /RDF && RSS 2.0 $result = (!isset($xml->entry) && !isset($xml->item) && !isset($xml->channel->item)) ? false : true; */ $result = true; /* autoblog */ if ($result === true) { $foldername = urlToFolder($siteurl, $rssurl); try { createAutoblog($sitetype, $sitename, $siteurl, $rssurl); if (DEBUG) { echo '<p>autoblog ' . $sitename . ' crée avec succès (DL DB : ' . var_dump($get_remote_db) . ' - DL media : ' . var_dump($get_remote_media) . ') : ' . $foldername . '</p>'; if (!ALLOW_REMOTE_DB_DL && !ALLOW_REMOTE_MEDIA_DL) { echo '<iframe width="1" height="1" frameborder="0" src="' . urlToFolder($siteurl, $rssurl) . '/index.php"></iframe>'; } } /* ============================================================================================================================================================================== */ /* récupération de la DB distante */ if ($get_remote_db == true && ALLOW_REMOTE_DB_DL) { $remote_db = str_replace("?export", $remote_folder . "/articles.db", $xsafremote); copy($remote_db, './' . $foldername . '/articles.db'); } /* préparation à la récupération des médias distants */ if ($get_remote_media == true && ALLOW_REMOTE_MEDIA_DL) { $remote_media = str_replace("?export", $remote_folder . "/?media", $xsafremote); if (DEBUG) { debug("Récupération de la liste des médias à {$remote_media} <br>"); } $json_media_import = file_get_contents($remote_media); if (DEBUG) { debug($json_media_import); } $media_data = json_decode($json_media_import, true); if (DEBUG) { debug($media_data); } if (!empty($json_media_import) && $media_data !== null && !empty($media_data['files'])) { file_put_contents('./' . $foldername . '/import.json', $json_media_import); } } /* ============================================================================================================================================================================== */ //TODO : tester si articles.db est une DB valide //$to_update[] = serverUrl().preg_replace("/(.*)\/(.*)$/i","$1/".$foldername , $_SERVER['SCRIPT_NAME']); // url of the new autoblog } catch (Exception $e) { if (DEBUG) { echo $e->getMessage(); } } } if (DEBUG) { echo '<p>time : ' . ($max_exec_time - time()) . '</p>'; } if (time() >= $max_exec_time) { if (DEBUG) { echo "<p>Time out !</p>"; } break; } } } else { if (DEBUG) { echo "Format JSON incorrect."; } return false; } } return; }
function create_from_opml($opml) { global $error, $success; $cpt = 0; foreach ($opml->body->outline as $outline) { if (!empty($outline['title']) && !empty($outline['text']) && !empty($outline['xmlUrl']) && !empty($outline['htmlUrl'])) { try { $sitename = escape($outline['title']); $siteurl = escape($outline['htmlUrl']); $sitetype = escape($outline['text']); if ($sitetype != 'microblog' && $sitetype != 'shaarli' && $sitetype != 'twitter' && $sitetype != 'youtube') { $sitetype = 'generic'; } $rssurl = DetectRedirect(escape($outline['xmlUrl'])); createAutoblog($sitetype, $sitename, $siteurl, $rssurl); $message = 'Autoblog "' . $sitename . '" crée avec succès. → <a target="_blank" href="' . urlToFolder($siteurl, $rssurl) . '">afficher l\'autoblog</a>.'; // Do not print iframe on big import (=> heavy and useless) if (++$cpt < 10) { $message .= '<iframe width="1" height="1" frameborder="0" src="' . urlToFolder($siteurl, $rssurl) . '/index.php"></iframe>'; } $success[] = $message; } catch (Exception $e) { $error[] = $e->getMessage(); } } } }