Showing posts with label xml. Show all posts
Showing posts with label xml. Show all posts

Sunday, August 12, 2012

How to get Longitude / Latitude in PHP using Google Maps API

This post is just a simple script I did, built in PHP that will get the coordinates of specific location.

The script uses google maps web service that returns XML data in which we need parse to get the information we need.

Take note also of the URL I used, you just need to add your google maps key.
http://maps.google.com/maps/geo?output=xml&oe=utf-8&key=enter+your+key+here&q=enter+your+query+here

<?php

$key = 'AIzaSyCrPl5vXuNjPU1fgHF69YPxEopT_NziA4o'; // your google maps key
$param = 'T2G 0S7'; // the location you want to look for, this can be postal code, map id, address, etc.

$geoinfo = get_longlat($key, $param);
var_dump($geoinfo);

function get_longlat($key='', $param='') {
        $request_url = "http://maps.google.com/maps/geo?output=xml&key=$key&oe=utf-8&q=".urlencode($param);
        $xml = simplexml_load_file($request_url);

        $geoinfo = array();
        if (!empty($xml->Response)) {
                $point = $xml->Response->Placemark->Point;
                if (!empty($point)) {
                        $coordinates = explode(",", $point->coordinates);
                        $geoinfo = array(
                                'lon' => $coordinates[0],
                                'lat' => $coordinates[1]
                        );
                }
        }

        return $geoinfo;
}

?>

You can also get other information by parsing the XML returned by the google maps web service. Please see below for the sample XML return.

<kml>
<Response>
    <name>t2g 0s7</name>
    <Status>
        <code>200</code>
        <request>geocode</request>
    </Status>
    <Placemark id="p1">
        <address>Calgary, AB T2G 0S7, Canada</address>
        <AddressDetails Accuracy="5">
            <Country>
                <CountryNameCode>CA</CountryNameCode>
                <CountryName>Canada</CountryName>
                <AdministrativeArea>
                    <AdministrativeAreaName>AB</AdministrativeAreaName>
                    <Locality>
                        <LocalityName>Calgary</LocalityName>
                        <PostalCode>
                            <PostalCodeNumber>T2G 0S7</PostalCodeNumber>
                        </PostalCode>
                    </Locality>
                </AdministrativeArea>
            </Country>
        </AddressDetails>
        <ExtendedData>
            <LatLonBox north="51.0439997" south="51.0413017" east="-114.0367519" west="-114.0394858"/>
        </ExtendedData>
        <Point>
            <coordinates>-114.0380127,51.0426718,0</coordinates>
        </Point>
    </Placemark>
</Response>
</kml>

Thursday, October 13, 2011

How to parse an XML return across browser and return an XML object via jQuery.

I came to across to a problem where I can't parse the XML return from the REST URL using jQuery on IE browser.

Since our best friend IE has another way of thinking, I come up with a function that cater all XML parsing (across browser).

The function below parseXMLToObj will accept parameter xmlData, which can either be an object or an XML string.

The function will return the converted XML object which you can use in doing some jQuery stuff.

You can download jQuery from here: http://code.jquery.com/jquery-latest.js


function parseXMLToObj(xmlData) {
        if ($.isXMLDoc(xmlData) || !$.browser.msie || ($.browser.msie && document.documentMode == 9)) {
                return $(xmlData);
        } else {
                var xmlDoc = $.parseXML(xmlData);
                return $(xmlDoc);
        }
}


Sample Usage:

var xmlData = "<results><data>1</data><data>2</data></results>";
parseXMLToObj(xmlData);


Goodluck! Happy coding!!

Sunday, May 15, 2011

Resolution to NuSOAP XML Parsing Error: XML or text declaration not at start of entity..

As I was doing a web service using NuSOAP in PHP, I encountered an XML Parsing Error saying "XML or text declaration not at start of entity.."

I re-checked my code multiple times but can't find any syntax problem.

I tried searching in google to find answers, but most of the forums are saying about the trailing spaces in the XML format which I believe I don't have.

Given that, I have NO CHOICE but to find it by myself..

After a long trial and error, doing some changes in the script.., removing some extra spaces.., replacing special characters.., removing some extra lines.., etc...

I was able to reach the end of the script and saw the new line after the PHP end tag "?>"..

Still in doubt, but I tried removing it.. and guess what?? it works!! That is a proof that patience and perseverance really works.. hehehe!!

Anyway, I can't believe that NuSOAP missed this.. Hope that their next version was able to resolve this..

Wednesday, January 12, 2011

Setting up a web service SERVER script in native PHP

This post will assist you on how to setup a web service server script using native PHP library. please follow the steps below.

1. create a class with all the methods you want to be accessible via web service. i created a simple class with a simple helloWorld method just for us to have it work.

class wservice {
    public function helloWorld($world) {
        return 'hello ' . $world;
    }
}

2. create WSDL of your web service. please take note that PHP doesn't support automatic generation of WSDL. hence, you should do it manually. WSDL should be created based on the function of your class above and definitions composes of the following elements: message, portType, binding, and service. save the file as wservice.wsdl for the next step.

<?xml version='1.0' encoding='UTF-8'?>
<definitions name="HW" targetNamespace="urn:HW" xmlns:typens="urn:HW" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
        <message name="helloWorld">
                <part name="world" type="xsd:string"/>
        </message>
        <message name="helloWorldResponse">
                <part name="return" type="xsd:integer"/>
        </message>
        <portType name="HWPortType">
                <operation name="helloWorld">
                        <documentation>
                        </documentation>
                        <input message="typens:helloWorld"/>
                        <output message="typens:hellowWorldResponse"/>
                </operation>
        </portType>
        <binding name="HWBinding" type="typens:HWPortType">
                <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
                <operation name="helloWorld">
                        <soap:operation soapAction="urn:HWAction"/>
                        <input>
                                <soap:body namespace="urn:HW" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </input>
                        <output>
                                <soap:body namespace="urn:HW" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </output>
                </operation>
        </binding>
        <service name="HWService">
                <port name="HWPort" binding="typens:HWBinding">
                        <soap:address location="webservice.php"/>
                </port>
        </service>
</definitions>

3. once your done with your WSDL, it's time to initialize the server, pass the path of the WSDL file that you just created and the name of the class that you just created.

ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("wservice.wsdl",array('soap_version' => SOAP_1_2));
$server->setClass("wservice");
$server->handle();

4. and that's it! please see the complete code below for the server end-point script and wsdl.

- wservice.php

<?php

class wservice {
    public function helloWorld($world) {
        return 'hello' . $world;
    }
}

ini_set("soap.wsdl_cache_enabled", "0");

$server = new SoapServer("wservice.wsdl",array('soap_version' => SOAP_1_2));
$server->setClass('wservice');
$server->handle();

?>

- wservice.wsdl

<?xml version='1.0' encoding='UTF-8'?>
<definitions name="HW" targetNamespace="urn:HW" xmlns:typens="urn:HW" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
        <message name="helloWorld">
                <part name="world" type="xsd:string"/>
        </message>
        <message name="helloWorldResponse">
                <part name="return" type="xsd:integer"/>
        </message>
        <portType name="HWPortType">
                <operation name="helloWorld">
                        <documentation>
                        </documentation>
                        <input message="typens:helloWorld"/>
                        <output message="typens:hellowWorldResponse"/>
                </operation>
        </portType>
        <binding name="HWBinding" type="typens:HWPortType">
                <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
                <operation name="helloWorld">
                        <soap:operation soapAction="urn:HWAction"/>
                        <input>
                                <soap:body namespace="urn:HW" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </input>
                        <output>
                                <soap:body namespace="urn:HW" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </output>
                </operation>
        </binding>
        <service name="HWService">
                <port name="HWPort" binding="typens:HWBinding">
                        <soap:address location="wservice.php"/>
                </port>
        </service>
</definitions>

Leadership 101


  • Leadership demands sacrifices for the near-term to receive lasting benefits. the longer we wait to make sacrifices, the harder they become. Successful people make important decisions early in their life, then manage those decisions the rest of their lives.
  • Growth does not happen by chance. If you want to be sure to grow, you need a plan something strategic, specific, and scheduled. it's a discipline that would need incredible determination from us.
  • Success comes by going the extra mile, working the extra hours, and investing the extra time. The same is true for us. If we want to get to excel in any segment of life, a little extra effort can help. Our efforts can go a long way if we only work a little smarter, listen a little better, push a little harder, and persevere a little longer.
  • Making a difference in your work is not about productivity; it's about people. When you focus on others and connect with them, you can work together to accomplish great things.
  • Envision a goal you'd like to reach. Make it big enough to scare you a little. Now write down a plan for moving toward it. Create mini-goals within the big goal, to set yourself up for continual progress. And include some risks, too. Set yourself up for success.
  • Leaders build margins, not image. A leader may be forced to take unpopular stands for the good of the company. Popularity isn't bad, but decisions made solely on the basis of popular opinion can be devastating. So take courage and make the right though sometimes painful choices.