0

This is the heart of my plugin that I've been painstakingly developing. Though I've ran into some trouble with the patterns..

<?php

$s = '
<embed type="application/x-shockwave-flash" id="single2" name="single2" src="http://api.realitylapse.com/player.swf" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" flashvars="file=http://cerium.realitylapse.com/stream/bea352a230ebd36b52dc27d874f41f5a/4e3c5eca/default/xxxxx/xxxxx-lq.mp4&amp;plugins=ltas&amp;ltas.cc=inhldvymihzxqln&amp;provider=http" height="424" width="659">

<embed type="application/x-shockwave-flash" src="http://www.xxxxx.com/player9397/player.swf?" quality="high" allowfullscreen="true" allowscriptaccess="always" wmode="opaque" flashvars="provider=http&amp;file=http://www.xxxxx.com/player9397/vb.php?id=TT175YivmF4y&amp;type=video&amp;backcolor=111111&amp;frontcolor=cccccc&amp;lightcolor=DE4949&amp;stretching=fill" height="420" width="99%">

<embed src="http://www.megavideo.com/v/P5X0UOA267fb79acd04cdb29a057c3fa0066573a1" type="application/x-shockwave-flash" allowfullscreen="true" width="100%" height="438">    
';


$patterns = array();
$patterns[] = '<embed[^>]+src=["\'](.+?)["\']';
$patterns[] = '<embed[^>]+data=["\'](.+?)["\']';  
$patterns[] = '<embed[^>]+flashvars="(.+?)["\']'; //Possible problem..
$patterns[] = '<embed[^>]+file=(.+?)[&]';         //
$patterns[] = '<iframe[^>]+src=["\'](.+?)["\']';
$patterns[] = '<iframe[^>]+data=["\'](.+?)["\']';
$patterns[] = '<object[^>]+src=["\'](.+?)["\']';
$patterns[] = '<object[^>]+data=["\'](.+?)["\']';
$patterns[] = '<video[^>]+src=["\'](.+?)["\']';
$patterns[] = '<video[^>]+data=["\'](.+?)["\']';
$patterns[] = '<video[^>]+file=(.+?)[&]';



$patterns = "#(?:" . implode("|", $patterns) . ")#si";

preg_match_all($patterns, ($s), $m);
if (!empty($m[0]))
{ 
    $edata = array();
    foreach($m[0] as $match)
    { 

//Embeds:
if (preg_match('#realitylapse.com/stream/(.+?)[&,"\']#si', $match, $id))
     $edata[] = "<!--nextpage--><!--tab_title:CERIUM-->\n[cerium " . $id[1] . "]";

else if (preg_match('#http&amp;file=http://www.xxxx.com/player9397/vb.php?id=(.+?)[&,"\']#si', $match, $id))
     $edata[] = "<!--nextpage--><!--tab_title:UNKNOWN-->\n[vb " . $id[1] . "]";

else if (preg_match('#http://www.megavideo.com/v/(.+)[&"\']#si', $match, $id))
     $edata[] = "<!--nextpage--><!--tab_title:MEGAVIDEO-->\n[megavideo " . $id[1] . "]";

    }

if (isset($edata[0])) {

$embeds = implode("\n", ($edata)); 

print $embeds;

}
    } 

?>

This outputs only:

[megavideo P5X0UOA267fb79acd04cdb29a057c3fa0066573a1]

Every other player embed I have matches. Anything that is in the flashvars area does not. That may not be the real reason. ..Whereas something like the megavideo embed does. I appreciate any help, thanks!

1 Answer 1

3

Instead of using regexp, I would recommend using an html parser like: http://simplehtmldom.sourceforge.net/

You can then easily read an elements attributes.

$html = str_get_html('<embed id="single2" height="424" width="659" flashvars="file=http://cerium.realitylapse.com/stream/bea352a230e" >');

$embed = $html->find('embed', 1);

$embed->height; // == "424"
$embed->flashvars; // == "file=http://cerium.realitylapse.com/stream/bea352a230e"
Sign up to request clarification or add additional context in comments.

2 Comments

For example DOMDocument is an HTML parser that's enabled by default on PHP.
..Yeah, I hear about that again and again. It probably would have been better to go with that over regexp, but it's a bit too late now. I've already learned a fair amount about the patterns, so it's not that much of an issue anymore. ..A bit surprised the parser works with it, though.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.