I am using a script called 'Pligg', currently a few members are trying to implement a section of the URL submission code that is similar to what Digg does, have the script crawl the URL being submitted, and give the user the option to select one of the images it finds.

We have been able to get it to crawl and display a list of images from the URL submitted but are unable to figure out how to get the image saved and then displayed next to the story/url submitted.

If anyone is familiar with Pligg and can offer some direction or ideas it would be appreciated.

Here is the code to date that crawls and displays the images:

submit.php:
PHP Code:
//catch images on destination url 
    
$pageString = @file_get_contents($url); 
    
preg_match_all('|<img .*?>|s'$pageString$matches); 
    
//the array $matches[0] now contains the img tags, let's echo 'em: 
 
$fulldomain 'http://www.'$domain
 
$newimages = array();  //initialize an array as image container 
 
foreach ($matches[0] as $path){ 
 
preg_match('/src="([^"]+)"/',$path$b); //get the image path by $b[1], however, will need to detect relative paths and convert to absolute paths 
 
$location $linkres->relative2absolute($fulldomain$b[1]);//this is to convert relative image paths to absolute image paths 
 
$filteredimg $linkres->filterimage($location120120); 
 if (
$filteredimg) { 
    
$image $linkres->scaleimage($filteredimg100100); //scale bigger images and filter out images smaller than 100x100. You can modify the picture dimensions limit based on your needs. 
     
    
$newimages[] = array( 
       
'url' => $location
       
'img_tag' => $image
        ); 
  } 

 
$main_smarty->assign('newimages'$newimages); 
//end of get images 
PHP Code:
//reset link_field1 as $product_image 
if(!empty($product_image_manual)){           //entered manually by user 
$linkres->link_field1 $product_image_manual
 

else { 
  if(!empty(
$linkres->product_image)){ 
  
$linkres->link_field1 $linkres->product_image;   //use link_field1 to store the image path 
  


link.php:

PHP Code:
    //Tony, get images 20080226 
function relative2absolute($absolute$relative) { 
        
$p = @parse_url($relative); 
        if(!
$p) { 
            
//$relative is a seriously malformed URL 
            
return false
        } 
        if(isset(
$p["scheme"])) return $relative
  
        
$parts=(parse_url($absolute)); 
  
        if(
substr($relative,0,1)=='/') { 
            
$cparts = (explode("/"$relative)); 
            
array_shift($cparts); 
        } else { 
            if(isset(
$parts['path'])){ 
                 
$aparts=explode('/',$parts['path']); 
                 
array_pop($aparts); 
                 
$aparts=array_filter($aparts); 
            } else { 
                 
$aparts=array(); 
            } 
           
$rparts = (explode("/"$relative)); 
           
$cparts array_merge($aparts$rparts); 
           foreach(
$cparts as $i => $part) { 
                if(
$part == '.') { 
                    unset(
$cparts[$i]); 
                } else if(
$part == '..') { 
                    unset(
$cparts[$i]); 
                    unset(
$cparts[$i-1]); 
                } 
            } 
        } 
        
$path implode("/"$cparts); 
  
        
$url ''
        if(
$parts['scheme']) { 
            
$url "$parts[scheme]://"
        } 
        if(isset(
$parts['user'])) { 
            
$url .= $parts['user']; 
            if(isset(
$parts['pass'])) { 
                
$url .= ":".$parts['pass']; 
            } 
            
$url .= "@"
        } 
        if(isset(
$parts['host'])) { 
            
$url .= $parts['host']."/"
        } 
        
$url .= $path
  
        return 
$url

 
function 
filterimage($location$minW=NULL$minH=NULL){ 
 
$img = @getimagesize($location); 
   if (
$img){                      //if image exists 
    
$w $img[0]; 
    
$h $img[1]; 
 
        if (
$w >= $minW && $h >= $minH){   //only if images greater than the minimums are they returned, otherwise, no 
        
return $location
        } 
        else { 
        return 
false;                  //return no images 
        

    } 

 
function 
scaleimage($location$maxw=NULL$maxh=NULL$alt=NULL$title=NULL){ 
    
$img = @getimagesize($location); 
    if(
$img){ 
        
$w $img[0]; 
        
$h $img[1]; 
 
        
$dim = array('w','h'); 
        foreach(
$dim AS $val){ 
            
$max "max{$val}"
            if(${
$val} > ${$max} && ${$max}){ 
                
$alt = ($val == 'w') ? 'h' 'w'
                
$ratio = ${$alt} / ${$val}; 
                ${
$val} = ${$max}; 
                ${
$alt} = ${$val} * $ratio
            } 
        } 
 
       return(
"<img src='{$location}' alt='{$alt}' width='{$w}' height='{$h}' title='{$title}'/>"); 
 
    } 

 
    
//enf of get images 
Then in our submit template file we have:

Code:
<div class="submission">
 
        <div class="tab">
    <h3>Please Choose a Product Picture:</h3>
             </div>
<div class="tab-details">If  none of the images below is right, you can enter one in the text field below.</div>
<div class="sub-thumbs">
<div style="overflow:auto; height:180px; width:100%;">
<table><tr>
{section name=img loop=$newimages} 
 <td><div class="radio-img">
 
            <div class="wrap">
                {$newimages[img].img_tag}
 
            </div>
 
         <input name="product_image" type="radio" id="product_image" value="{$newimages[img].url}">
 
    </div>
  </td>
{/section}
 <td><div class="radio-img">
 
            <div class="wrap">
                <img src="templates/yget/images/no_thumb.gif" border="0">
 
            </div>
 
         <input name="product_image" type="radio" id="product_image" value="">
 
    </div>
  </td>
</tr>
</table>
 You can also enter the image manually here:
<input type="text" name="product_image_manual" id="product_image_manual" size="60" />
 </div>
</div>
I have setup a test install at http://pliggs.com/templates/cliption if you would like to see what we have in action thus far, Username: test password: testing

Again, thanks.


Geoserv.