Register

If this is your first visit, please click the Sign Up now button to begin the process of creating your account so you can begin posting on our forums! The Sign Up process will only take up about a minute of two of your time.

Results 1 to 10 of 10
  1. #1
    Senior Member leprechaun13's Avatar
    Join Date
    May 2005
    Location
    Northampton
    Posts
    487
    Member #
    10058
    I need to read the XML data from http://api.local.yahoo.com/MapsServi...eocode=Geocode

    and set the variables
    PHP Code:
    $Latitude $Longdtitue 
    to the correspoding XML fields to be used in google maps.
    Regards Phil,


  2.  

  3. #2
    WDF Staff mlseim's Avatar
    Join Date
    Apr 2004
    Location
    Cottage Grove, Minnesota
    Posts
    7,733
    Member #
    5580
    Liked
    718 times
    I found a simple way using lastRSS.php

    Here's the catch though ... since your XML does not have
    standard XML tags, like <item> ... instead they have <Result>.
    So, I had to alter lastRSS.php to make it work.

    Here's my working example:
    http://catpin.com/geocode/

    I attached the "lastRSS.txt" file (see attached at bottom).
    Download that and change the extension to .php
    Save in same directory as "index.php".

    Here is the PHP script (index.php)
    PHP Code:
    <?php
     
    echo"
    <style>
    #rss{
    margin: 0px auto;
    font-family: arial;
    font-size: 8pt;
    color: #222;
    width: 200px;
    padding: 5px 10px 5px 0px;
    border: 1px solid #555;
    text-align: left;
    }
    </style>
    "
    ;
    include 
    "./lastRSS.php"
    $rss = new lastRSS
    $count=1;
    if (
    $rs $rss->get('http://api.local.yahoo.com/MapsService/V1/geocode?appid=capelinks&location=torrevieja&Geocode=Geocode')) { 
    echo 
    "<div id='rss'>\n";
    //this is a trick ... the XML has no <item> tags, see lastRSS.php
    //to see the switch to <Result> tags. 
    foreach($rs['items'] as $item) {
    if(
    $count<=2){ 
    $lat=$item['Latitude']; 
    $lon=$item['Longitude'];
    }
    $count=$count+1;

    echo 
    "
    Latitude = 
    $lat<br>
    Longitude = 
    $lon<br>
    </div>\n"


    else { 
    echo 
    "Error: It's not possible to reach RSS file...\n"

    ?>


  4. #3
    Senior Member leprechaun13's Avatar
    Join Date
    May 2005
    Location
    Northampton
    Posts
    487
    Member #
    10058
    can u post the source for the lastRSS.txt as i cant open the attachment at school.The proxy im using wont allow it.
    Regards Phil,


  5. #4
    Senior Member leprechaun13's Avatar
    Join Date
    May 2005
    Location
    Northampton
    Posts
    487
    Member #
    10058
    Got a few errors can find them @ http://philbaucutt.co.uk/rss/
    Regards Phil,


  6. #5
    WDF Staff mlseim's Avatar
    Join Date
    Apr 2004
    Location
    Cottage Grove, Minnesota
    Posts
    7,733
    Member #
    5580
    Liked
    718 times
    Phil ...
    Try the script below ... save it as "lastRSS.php" into the same directory.

    Here is the "altered" lastRSS script:

    PHP Code:
    <?php
    /*
     ======================================================================
     lastRSS 0.9.1
     
     Simple yet powerfull PHP class to parse RSS files.
     
     by Vojtech Semecky, webmaster @ webdot . cz
     
     Latest version, features, manual and examples:
         http://lastrss.webdot.cz/

     ----------------------------------------------------------------------
     LICENSE

     This program is free software; you can redistribute it and/or
     modify it under the terms of the GNU General Public License (GPL)
     as published by the Free Software Foundation; either version 2
     of the License, or (at your option) any later version.

     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     GNU General Public License for more details.

     To read the license please visit http://www.gnu.org/copyleft/gpl.html
     ======================================================================
    */

    /**
    * lastRSS
    * Simple yet powerfull PHP class to parse RSS files.
    */
    class lastRSS {
        
    // -------------------------------------------------------------------
        // Public properties
        // -------------------------------------------------------------------
        
    var $default_cp 'UTF-8';
        var 
    $CDATA 'nochange';
        var 
    $cp '';
        var 
    $items_limit 0;
        var 
    $stripHTML False;
        var 
    $date_format '';

        
    // -------------------------------------------------------------------
        // Private variables
        // -------------------------------------------------------------------
        
    var $channeltags = array ('title''link''description''language''copyright''managingEditor''webMaster''lastBuildDate''rating''docs');
        var 
    $itemtags = array('Latitude''Longitude''title''link''description''author''category''comments''enclosure''guid''pubDate''source');
        var 
    $imagetags = array('title''url''link''width''height');
        var 
    $textinputtags = array('title''description''name''link');

        
    // -------------------------------------------------------------------
        // Parse RSS file and returns associative array.
        // -------------------------------------------------------------------
        
    function Get ($rss_url) {
            
    // If CACHE ENABLED
            
    if ($this->cache_dir != '') {
                
    $cache_file $this->cache_dir '/rsscache_' md5($rss_url);
                
    $timedif = @(time() - filemtime($cache_file));
                if (
    $timedif $this->cache_time) {
                    
    // cached file is fresh enough, return cached array
                    
    $result unserialize(join(''file($cache_file)));
                    
    // set 'cached' to 1 only if cached file is correct
                    
    if ($result$result['cached'] = 1;
                } else {
                    
    // cached file is too old, create new
                    
    $result $this->Parse($rss_url);
                    
    $serialized serialize($result);
                    if (
    $f = @fopen($cache_file'w')) {
                        
    fwrite ($f$serializedstrlen($serialized));
                        
    fclose($f);
                    }
                    if (
    $result$result['cached'] = 0;
                }
            }
            
    // If CACHE DISABLED >> load and parse the file directly
            
    else {
                
    $result $this->Parse($rss_url);
                if (
    $result$result['cached'] = 0;
            }
            
    // return result
            
    return $result;
        }
        
        
    // -------------------------------------------------------------------
        // Modification of preg_match(); return trimed field with index 1
        // from 'classic' preg_match() array output
        // -------------------------------------------------------------------
        
    function my_preg_match ($pattern$subject) {
            
    // start regullar expression
            
    preg_match($pattern$subject$out);

            
    // if there is some result... process it and return it
            
    if(isset($out[1])) {
                
    // Process CDATA (if present)
                
    if ($this->CDATA == 'content') { // Get CDATA content (without CDATA tag)
                    
    $out[1] = strtr($out[1], array('<![CDATA['=>''']]>'=>''));
                } elseif (
    $this->CDATA == 'strip') { // Strip CDATA
                    
    $out[1] = strtr($out[1], array('<![CDATA['=>''']]>'=>''));
                }

                
    // If code page is set convert character encoding to required
                
    if ($this->cp != '')
                    
    //$out[1] = $this->MyConvertEncoding($this->rsscp, $this->cp, $out[1]);
                    
    $out[1] = iconv($this->rsscp$this->cp.'//TRANSLIT'$out[1]);
                
    // Return result
                
    return trim($out[1]);
            } else {
            
    // if there is NO result, return empty string
                
    return '';
            }
        }

        
    // -------------------------------------------------------------------
        // Replace HTML entities &something; by real characters
        // -------------------------------------------------------------------
        
    function unhtmlentities ($string) {
            
    // Get HTML entities table
            
    $trans_tbl get_html_translation_table (HTML_ENTITIESENT_QUOTES);
            
    // Flip keys<==>values
            
    $trans_tbl array_flip ($trans_tbl);
            
    // Add support for &apos; entity (missing in HTML_ENTITIES)
            
    $trans_tbl += array('&apos;' => "'");
            
    // Replace entities by values
            
    return strtr ($string$trans_tbl);
        }

        
    // -------------------------------------------------------------------
        // Parse() is private method used by Get() to load and parse RSS file.
        // Don't use Parse() in your scripts - use Get($rss_file) instead.
        // -------------------------------------------------------------------
        
    function Parse ($rss_url) {
            
    // Open and load RSS file
            
    if ($f = @fopen($rss_url'r')) {
                
    $rss_content '';
                while (!
    feof($f)) {
                    
    $rss_content .= fgets($f4096);
                }
                
    fclose($f);

                
    // Parse document encoding
                
    $result['encoding'] = $this->my_preg_match("'encoding=[\'\"](.*?)[\'\"]'si"$rss_content);
                
    // if document codepage is specified, use it
                
    if ($result['encoding'] != '')
                    { 
    $this->rsscp $result['encoding']; } // This is used in my_preg_match()
                // otherwise use the default codepage
                
    else
                    { 
    $this->rsscp $this->default_cp; } // This is used in my_preg_match()

                // Parse CHANNEL info
                
    preg_match("'<channel.*?>(.*?)</channel>'si"$rss_content$out_channel);
                foreach(
    $this->channeltags as $channeltag)
                {
                    
    $temp $this->my_preg_match("'<$channeltag.*?>(.*?)</$channeltag>'si"$out_channel[1]);
                    if (
    $temp != ''$result[$channeltag] = $temp// Set only if not empty
                
    }
                
    // If date_format is specified and lastBuildDate is valid
                
    if ($this->date_format != '' && ($timestamp strtotime($result['lastBuildDate'])) !==-1) {
                            
    // convert lastBuildDate to specified date format
                            
    $result['lastBuildDate'] = date($this->date_format$timestamp);
                }

                
    // Parse TEXTINPUT info
                
    preg_match("'<textinput(|[^>]*[^/])>(.*?)</textinput>'si"$rss_content$out_textinfo);
                    
    // This a little strange regexp means:
                    // Look for tag <textinput> with or without any attributes, but skip truncated version <textinput /> (it's not beggining tag)
                
    if (isset($out_textinfo[2])) {
                    foreach(
    $this->textinputtags as $textinputtag) {
                        
    $temp $this->my_preg_match("'<$textinputtag.*?>(.*?)</$textinputtag>'si"$out_textinfo[2]);
                        if (
    $temp != ''$result['textinput_'.$textinputtag] = $temp// Set only if not empty
                    
    }
                }
                
    // Parse IMAGE info
                
    preg_match("'<image.*?>(.*?)</image>'si"$rss_content$out_imageinfo);
                if (isset(
    $out_imageinfo[1])) {
                    foreach(
    $this->imagetags as $imagetag) {
                        
    $temp $this->my_preg_match("'<$imagetag.*?>(.*?)</$imagetag>'si"$out_imageinfo[1]);
                        if (
    $temp != ''$result['image_'.$imagetag] = $temp// Set only if not empty
                    
    }
                }
                
    // Parse ITEMS
                
    preg_match_all("'<result(| .*?)>(.*?)</result>'si"$rss_content$items);
                
    $rss_items $items[2];
                
    $i 0;
                
    $result['items'] = array(); // create array even if there are no items
                
    foreach($rss_items as $rss_item) {
                    
    // If number of items is lower then limit: Parse one item
                    
    if ($i $this->items_limit || $this->items_limit == 0) {
                        foreach(
    $this->itemtags as $itemtag) {
                            
    $temp $this->my_preg_match("'<$itemtag.*?>(.*?)</$itemtag>'si"$rss_item);
                            if (
    $temp != ''$result['items'][$i][$itemtag] = $temp// Set only if not empty
                        
    }
                        
    // Strip HTML tags and other bull**** from DESCRIPTION
                        
    if ($this->stripHTML && $result['items'][$i]['description'])
                            
    $result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description'])));
                        
    // Strip HTML tags and other bull**** from TITLE
                        
    if ($this->stripHTML && $result['items'][$i]['title'])
                            
    $result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title'])));
                        
    // If date_format is specified and pubDate is valid
                        
    if ($this->date_format != '' && ($timestamp strtotime($result['items'][$i]['pubDate'])) !==-1) {
                            
    // convert pubDate to specified date format
                            
    $result['items'][$i]['pubDate'] = date($this->date_format$timestamp);
                        }
                        
    // Item counter
                        
    $i++;
                    }
                }

                
    $result['items_count'] = $i;
                return 
    $result;
            }
            else 
    // Error in opening return False
            
    {
                return 
    False;
            }
        }
    }

    ?>


  7. #6
    Senior Member leprechaun13's Avatar
    Join Date
    May 2005
    Location
    Northampton
    Posts
    487
    Member #
    10058
    Thanks, ill get looking at that when Ive got some of the more important stuff done on this project, back at home now. was having a few problems when testing it at school, should be able to sort them now.
    Regards Phil,


  8. #7
    Senior Member filburt1's Avatar
    Join Date
    Jul 2002
    Location
    Maryland, US
    Posts
    11,774
    Member #
    3
    Liked
    21 times
    Ew, regular expressions to read XML.

    Building it the natural way--using a data tree, which is what it represents in the first place--is both easier and cleaner, provided you have the DOM module and get familiar with it: http://php.net/dom . It's nearly the same as the Javascript DOM.
    filburt1, Web Design Forums.net founder
    Site of the Month contest: submit your site or vote for the winner!

  9. #8
    WDF Staff smoseley's Avatar
    Join Date
    Mar 2003
    Location
    Boston, MA
    Posts
    9,729
    Member #
    819
    Liked
    205 times
    While I agree with filburt that DOM is the "proper" way to do it, if you're doing any significant amount of XML parsing, DOM has a lot of overhead... I've found other less accepted methods of XML parsing to be singificantly quicker.

  10. #9
    WDF Staff mlseim's Avatar
    Join Date
    Apr 2004
    Location
    Cottage Grove, Minnesota
    Posts
    7,733
    Member #
    5580
    Liked
    718 times
    Looking at that DOM module stuff ... slightly embarrassed because
    I didn't understand any of that. Even the examples seemed like
    the various authors were struggling to show "the best way".

    I don't know what Phil's scripting level is, but I think I'll stick
    to something that seems much simpler to me.

    I guess that I have some learning to do.


  11. #10
    Senior Member leprechaun13's Avatar
    Join Date
    May 2005
    Location
    Northampton
    Posts
    487
    Member #
    10058
    Nah, i havnt gone that deep into PHP ive used whats become necessary. If I need to do something then ill research it, if i dont need to know it to do what I want to achieve I dont bother.

    Which is probably the wrong attitude to take.

    I took a quick look at the DOM so can you post some sort of practicle example reading a couple of fields, thats the easiest way of learning I find.
    Regards Phil,



Remove Ads

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
All times are GMT -6. The time now is 04:07 AM.
Powered by vBulletin® Version 4.2.3
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.
vBulletin Skin By: PurevB.com