webForumDet fria alternativet

Filtrera rss flöde på nyckelord?

PHPur PHP

11 svar · 1 636 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Jag hämtar -och visar flera rss flöden med SimplePie.

Nu skulle jag även behöva filtrera, så att endast poster som innehåller ett -eller flera specifika ord (nyckelord), ska visas.
Hur kan jag åstadkomma detta på bästa sätt?

Finns det något annat "bibliotek" som är bättre att använda, istället för SimplePie?

Är tacksam för all hjälp.

Medlem sedan juli 20041 271 inlägg
#2

Ingen som har någon idé? :(

Skickat från min GT-I9300 via Tapatalk 2

Medlem sedan juli 20041 271 inlägg
#3

Har testat med detta, men det blir ingen skillnad.

$keywords = array("ord1", "ord2", "ord3"); 
if (in_array($title, $keywords, FALSE)) die("<p>Inget hittades!!!</p>");

Är säker på att detta har tagits upp tidigare, men jag har inte lyckats att hitta någon lösning.

Tacksam för hjälp!

Medlem sedan jan. 2005953 inlägg
#4

Så som du har skrivit nu så har du följande funktionalitet:

if ($title == "ord1" || $title == "ord2" || $title == "ord3")
   die("<p>Inget hittades!!!</p>");

Dvs, om $title är lika med något värde i arrayen $keywords (notera: lika med, inte innehåller), då ska du visa ett felmeddelande och avbryta exekveringen av scriptet.

Jag tror mig se två fel här:
1. Du avbryter exekvering av scriptet OM matchning görs. Jag tror du menar tvärtom.
2. Du kontrollerar inte om $title innehåller de specifika nyckelorden, utan om $title är lika med något av de specifika nyckelorden.

Titta t.ex. på någon av funktionerna preg_match(), strpos(), stripos() eller strstr() för att kolla om en sträng innehåller ett visst värde.

Medlem sedan juli 20041 271 inlägg
#5

Ja, jag menade givetvis tvärtom. :r
Ska kolla på de andra funktionerna.

Tack!

EDIT:
Testade med följande kod, men det resulterade i "Finns inte!", (fast att jag VET att flera av orden finns).

$keywords = "ord1 ord2 ord3"; 

$title = $item->get_title();
$pos = stripos($title, $keywords); if ($pos === false) die("<p>Finns inte!</p>");

Tänker jag fel? :q

Medlem sedan juli 20041 271 inlägg
#6

Här är merparten av koden:

	<?php 
foreach($first_items as $item):
		$feed = $item->get_feed();
 
		$keywords = "ord1 ord2 ord3";
		
		$title = $item->get_title(); 
		
		$pos = stripos($title, $keywords); if ($pos === false) die("<p>Finns inte!</p>"); 
				
		if ($author = $feed->get_author()) 
		{
		$author = ", " .$author->get_name(). "";
		}
		?>
 
		<br /><p><a href="<?php echo $item->get_permalink(); ?>" target="_blank"><b><?php echo mb_strtoupper($item->get_title(), 'iso-8859-1'); ?></b></a><br />Postad <?php echo $item->get_date('j M Y | H:i'); ?>
  
			<?php 
			
			if ($enclosure = $item->get_enclosure())
			{ 
			if ($enclosure->get_link() != '') {
			print("<a href=\"" .$item->get_permalink(). "\" title=\"" . $item->get_title() . "\" target=\"_blank\"><img src=\"" . $enclosure->get_link() . "\" alt=\"" . $item->get_title() . "\" /></a>"); 
			//echo $enclosure->embed(); 
			} else {
			print("Ingen bild!"); 
			}
			}
			
			print("<br /><br />" .$item->get_content(). "\n");
			
			?>
				</p> 
			<br /><p class="footnote"><b>Källa:</b> <a href="<?php echo $feed->get_permalink(); ?>" target="_blank"><?php echo utf8_decode($feed->get_title()); ?></a><?=$author?></p><br /><hr />
 
	<?php endforeach; ?>

Som jag nämnt tidigare, vill jag endast visa poster som innehåller något av nyckelorden ovan.

Medlem sedan sep. 20051 758 inlägg
#7

Jag tror att det ska vara komma (,) mellan orden i keywords, alltså

$keywords = "ord1, ord2, ord3";

och är det inte ett = för mycket i if-satsen, kanske

if ($pos == false)

Medlem sedan juli 20041 271 inlägg
#8

b242569 skrev:

Jag tror att det ska vara komma (,) mellan orden i keywords, alltså

$keywords = "ord1, ord2, ord3";

och är det inte ett = för mycket i if-satsen, kanske

if ($pos == false)

Har testat att ändra, men det blev ingen skillnad. :(

Medlem sedan juli 20041 271 inlägg
#9

Någon som vill hjälpa mig? :o

Skickat från min GT-I9300 via Tapatalk 2

Medlem sedan juni 20019 519 inlägg
#10

Jag tror att det ska vara komma (,) mellan orden i keywords, alltså

spelar absolut ingen roll, då den kollar efter en position, om du har med dig "," och man kan söka efter "," så kommer den säga att den hittar den i träffen. den kommer även få träff på "d1" osv. Om något så är det vettigare om man måste träffa på exakta ord så är array lösningen en bättre idé.

Nu är inte PHP min starka sida alls.. men die avbryter väl for each.. så om du inte få en träff på första posten i din RSS feed så kommer den inte försöka mer

<?php 
$keywords = "ord1 ord2 ord3";

foreach($first_items as $item):
	$feed = $item->get_feed();
	$title = $item->get_title(); 

	$pos = stripos($title, $keywords);
	if ($pos === false) { continue; }

	if ($author = $feed->get_author()) 
	{
		$author = ", " .$author->get_name(). "";
	}
	?>
	<br />
	<p>
		<a href="<?php echo $item->get_permalink(); ?>" target="_blank">
			<b><?php echo mb_strtoupper($item->get_title(), 'iso-8859-1'); ?></b>
		</a>
		<br />Postad <?php echo $item->get_date('j M Y | H:i'); ?>
	<?php 
	if ($enclosure = $item->get_enclosure())
	{ 
		if ($enclosure->get_link() != '') {
			print("<a href=\"" .$item->get_permalink(). "\" title=\"" . $item->get_title() . "\" target=\"_blank\"><img src=\"" . $enclosure->get_link() . "\" alt=\"" . $item->get_title() . "\" /></a>"); 
		} else {
			print("Ingen bild!"); 
		}
	}

	print("<br /><br />" .$item->get_content(). "\n");
	?>
	</p> 
	<br /><p class="footnote"><b>Källa:</b> <a href="<?php echo $feed->get_permalink(); ?>" target="_blank"><?php echo utf8_decode($feed->get_title()); ?></a><?=$author?></p><br /><hr />
<?php endforeach; ?>

om nu allt annat i koden fungera borde den fortsätta for each... men som sagt lär ha fel.

	$pos = stripos($title, $keywords);
	if ($pos === false) { continue; }

Om detta är samma som i javascript så kommer den alltid vara false (om === är att den kolla typ på $pos) för $pos är en sträng och kommer aldrig vara en boolean, men enligt php guiden så skall detta gå bra...

Medlem sedan juli 20041 271 inlägg
#11

Får fortfarande inget resultat med "sökorden".

	foreach($first_items as $item):
		$feed = $item->get_feed();
		
		$info = mb_strtolower($item->get_content());
		
		$ord = "ord1 ord2 ord3";
				
		$pos = stripos($info, $ord);
	    if ($pos === true) { continue; }
			
		if ($author = $feed->get_author()) 
		{
		$author = ", " .$author->get_name(). "";
		}
		?>
 
		<br /><p><a href="<?php echo $item->get_permalink(); ?>" target="_blank"><b><?php echo mb_strtoupper(utf8_decode($item->get_title())); ?></b></a><br />Postad <?php echo $item->get_date('j M Y | H:i'); ?>
  
			<?php if ($enclosure = $item->get_enclosure())
			{ 
			if ($enclosure->get_link() != '') {
			print("<a href=\"" .$item->get_permalink(). "\" title=\"" . utf8_decode($item->get_title()) . "\" target=\"_blank\"><img src=\"" . $enclosure->get_link() . "\" alt=\"" . $item->get_title() . "\" /></a>"); 
			//echo $enclosure->embed(); 
			} else {
			print(" <em>( ingen bild )</em>"); 
			}
			}
			
			print("<br /><br />" .$item->get_content(). "\n");
			?>
				</p> 
			<!--<br /><p class="footnote"><b>Källa:</b> <a href="<?php echo $feed->get_permalink(); ?>" target="_blank"><?php echo utf8_decode($feed->get_title()); ?></a><?=$author?></p>--><br />
Medlem sedan jan. 2005953 inlägg
#12

Du söker nu i $info om strängen "ord1 ord2 ord3" finns där. Jag tror inte att det är detta du menar, jag tror att du vill veta om någon av delsträngarna "ord1", "ord2" eller "ord3" finns i $info. Du måste då splitta $ord så att du kollar ett ord åt gången.

Exempel:

$info = "Denna sträng innehåller ord2 men inte något av de andra";
$ord = "ord1 ord2 ord3";
/* kan också vara
$ord = array('ord1', 'ord2', 'ord3'); 
då slipper du nästa kodrad */
$ord = explode(' ', $ord);
$found = false;
foreach ($ord as $o) {
    if (stripos($info, $o) !== false) {
        $found = true;
        break; // Vi har hittat en matchning och behöver inte köra vidare i foreach-loopen
    }
}

if (!$found) {
    echo 'Finns inte!';
} else {
   // Gör vad du vill när något av sökorden finns
}
130 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)