' => ' ', '
' => ' ', '

' => ' ', "\n" => ' ', "\r" => ' ', ); public static function getModuleInfo() { return array( 'title' => 'ProcessWire RSS Fetch', 'summary' => 'ProcessWire External RSS Feed Fetch', 'version' => 001, 'author' => 'Laegnur', 'href' => 'https://laegnur.artabro.org/', 'icon' => 'rss' ); } public function ___execute() { $form = $this->modules->get("InputfieldForm"); $form->action = "./"; $form->method = "post"; $form->attr("id+name",'rssfetch-form'); $fieldText = $this->modules->get("InputfieldText"); $fieldText->label = "RSS feed"; $fieldText->name = 'rss'; $fieldText->description = "URL del feed RSS"; $fieldText->columnWidth = 100; $fieldText->required = 1; $form->append($fieldText); $submit = $this->modules->get("InputfieldSubmit"); $submit->attr("value","Traer posts"); $submit->attr("id+name","submit"); $form->append($submit); $out = $form->render(); if($this->input->post->submit) { set_time_limit(600); $form->processInput($this->input->post); if(!$form->getErrors()) { $this->items = new WireArray(); $xmlData = $this->loadXmlData($this->input->post->rss); $rss = simplexml_load_string($xmlData); if(!$rss) { $msg = "Unable to load RSS feed at $url: \n"; foreach(libxml_get_errors() as $error) $msg .= $error . " \n"; $out .= $msg; return $out; } foreach($rss->channel->category as $category) { $name = $this->sanitizer->pageNameTranslate($category); if(($this->pages->findOne("template=etiqueta,name=$name") instanceof NullPage)) { $t = new Page(); $t->template = 'etiqueta'; $t->parent = wire('pages')->get('/noticias/etiquetas/'); $t->name = $name; $t->title = $category; $t->save(); $this->log('Creada etiqueta: ' . $category, ['name' => 'rssfetch']); } else { $this->log('Etiqueta ya existente: ' . $category, ['name' => 'rssfetch']); } } foreach($rss->channel->item as $item) { $title = ''; $date = ''; $img = ''; $content = ''; $category = array(); $tags = array(); foreach($item as $key => $value) { switch ($key) { case 'pubDate': $date = $value; break; case 'title': $title = $value; break; case 'description': $content = $this->cleanText($value); break; case 'media:thumbnail': $attributes = $key->attributes(); $img = $attributes['url']; break; case 'category': $tags[] = $value; break; default: break; } } $out .= '[ '. "\n" . 'Data: ' . $date . "\n" . 'Titulo: ' . $title . "\n" . 'Contenido: ' . $content . "\n" . 'Img: ' . $img . "\n" . 'Etiquetas: ' . implode(', ', $tags) . "\n" . ']'. "\n"; /*$p = new Page(); $p->template = 'publicacion'; $p->parent = wire('pages')->get('/noticias/publicaciones/'); $p->addStatus(Page::statusUnpublished); $p $p->save();*/ } } return $out; } return $out; } public function install() { $page = new Page(); $page->template = "admin"; $page->name = "feed-fetch"; $page->title = "RSS Feed Fetch"; $page->save(); $page->process = 'ProcessRSSFetch'; $admin = $this->pages->get("id=2"); $page->parent = $admin; $page->save(); } public function uninstall() { $page = $this->pages->get("name=feed-fetch"); if(count($page)) $this->pages->delete($page, true); } /** * Load XML data from either the RSS URL or the cache file * * @param string $url * @return bool|string * */ protected function loadXmlData($url) { $cacheFile = $this->config->paths->cache . $this->className() . '/' . md5($url) . '.xml.cache'; if(!is_file($cacheFile) || time() - filemtime($cacheFile) > 120) { $http = new WireHttp(); $this->wire($http); $xmlData = $http->get($url); if(empty($xmlData)) { $this->error("Unable to load: $url"); return false; } else { @file_put_contents($cacheFile, $xmlData, LOCK_EX); } } else { $xmlData = file_get_contents($cacheFile); if($xmlData === false) { $this->error("Unable to load XML data cache"); return false; } } return $xmlData; } /** * Cleans text string from a feed before storage in our object * * @param string $value * @return string * */ protected function cleanText($value) { if(count($this->replacements)) { $value = str_ireplace(array_keys($this->replacements), array_values($this->replacements), $value); } $value = trim(strip_tags($value)); if(mb_strlen($value, "UTF-8") > 2048) { $value = mb_substr($value, 0, 2048, "UTF-8"); } $sanitizer = $this->wire('sanitizer'); $value = $sanitizer->unentities($value); $value = $sanitizer->entities($value); return $value; } }