Call Rest Api and Json Parsing in Salesforce

Requirement:

To Call Current weather api show data on VF page, Based on Search City


Solution: 


Call the rest api and parse the json and one more thing add End Point url in Remote Site Setting


First Step:


Create a Class and Parse the JSON data


Create Class: CurrentDayWeatherApiController 



Class Code:



public class CurrentDayWeatherApiController {



           public string cityName{get;set;}  

     //   public boolean showpanel{get;set;} 
        
         public List<weatherRecords> WeathersList{get; set;}

    public CurrentDayWeatherApiController()

    {

    }


    public void ShowWeather()

        {   
         
          try
          {
           if(cityName!=null && cityName!='')
           {
                string endPointURL  = 'http://api.openweathermap.org/data/2.5/find?q='+cityName;
                Httprequest req = new Httprequest();
                req.setEndpoint(endPointURL);
                req.setMethod('GET');
                //req.setHeader('Authorization', 'Basic ' + encodedAuthentication);
       
                Httpresponse response = new Httpresponse();
                if(Test.isRunningTest()){           
                    response.setStatusCode(200);
                    
                    
                    response.setBody('{"message":"accurate","cod":"200","count":1,"list":[{"id":7279746,"name":"Noida","coord":{"lon":77.330002,"lat":28.58},"main":{"temp":313.09,"temp_min":313.09,"temp_max":313.09,"pressure":991.92,"sea_level":1015.98,"grnd_level":991.92,"humidity":29},"dt":1431845612,"wind":{"speed":3.96,"deg":274.504},"sys":{"country":"IN"},"clouds":{"all":0},"weather":[{"id":800,"main":"Clear","description":"Sky is Clear","icon":"01d"}]}]}');
                }
                else
                {        
                     response = MakeCall(req);
                }
                
                if(response.getStatusCode() == 200){
                    system.debug('EMailStatusCode200');
                    String repWeatherBody = response.getBody();
                    system.debug('***repWeatherBody***'+repWeatherBody);
                  // list is salesforce keyword so we need to replace it another string
                    repWeatherBody = repWeatherBody.replace('list','xyz_list');
                    system.debug('***ReplacerepWeatherBody***'+repWeatherBody);
                    ShowWeatherData.ShowWeather objClsResponse = (ShowWeatherData.ShowWeather)JSON.deserialize(repWeatherBody, ShowWeatherData.ShowWeather.class);
                  
                    system.debug('***objClsEmailResponse***'+objClsResponse);
                    WeathersList = new List<weatherRecords>();
                    weatherRecords wR = new weatherRecords();
                     wR.msg = objClsResponse.message;
                     wR.name = objClsResponse.xyz_list[0].name;
                     wR.lon = objClsResponse.xyz_list[0].coord.lon;
                    
                     WeathersList.add(wR);
                    
                }
                
                if(WeathersList.size()<=0 && WeathersList==null)
                {
                   ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error, 'No Record Found'));
                }
            }
            else
            {
               ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error, 'Please Enter the City Name'));
            }
            
            
            
          }
          
          catch(exception ee){
            ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, ee.getMessage()));
        }
            
           
        }
        
        
        public static HttpResponse MakeCall(Httprequest req){
        HttpResponse resObj = new HttpResponse();
        Http ht = new Http();
        
        if(!Test.isRunningTest()){
            resObj = ht.send(req);
        }else{
            return null;
        }
        return resObj;
    }
    



        public class weatherRecords{

            public string msg{get;set;}
             public string name{get;set;}
            public string lon{get;set;}
            
           
        }
}

PageCode


<apex:page controller="CurrentDayWeatherApiController">



    <style>

       .statusStyle {
            background: url(/img/loading.gif) no-repeat 0 0;
            padding-left: 28px;
            margin-left: 680px;
            margin-top: 20px;
            line-height: 40px;
            background-size: 22px 22px;
            position: fixed;
       }
    </style>
   <apex:form id="frmID">
    <apex:pagemessages id="dd"/>
   <apex:actionStatus id="actionStatus" startText="Loading......... " stopText=""  startStyleClass="statusStyle"/>
       <apex:pageBlock id="PBlockID">
       
           <apex:pageBlockSection >
               
                Enter City Name <apex:inputText value="{!cityName }"/>
               
               
           </apex:pageBlockSection>
           
           <apex:pageBlockButtons location="bottom">
           
           <apex:commandButton value="Show" action="{!ShowWeather}" reRender="PBDatID,frmID" status="actionStatus"/>
           </apex:pageBlockButtons>
           
          
       
       </apex:pageBlock>
      
       <apex:pageBlock id="PBDatID" > <!-- rendered="{!if(WeathersList!= null && WeathersList.size > 0,true, false)}" -->
            <apex:pageBlockTable value="{!WeathersList}" var="Obj" id="PbID" >
             <apex:column headerValue="Message" value="{!Obj.msg}"/>
          <apex:column headerValue="Name" value="{!Obj.name}"/>
            <apex:column headerValue="Lon" value="{!Obj.lon}"/>
            
               
           </apex:pageBlockTable>
       
       </apex:pageBlock>
   
   
   </apex:form>

</apex:page>



Create New Class Parsing JSON Class
Class Name : ShowWeatherData

 //----------------JSON FORMAT----------------------------------
/*
{
 "message":"accurate",
 "cod":"200",
 "count":1,
 "list":
    [
        {
            "id":7279746,
            "name":"Noida",
            "coord":
                {
                    "lon":77.330002,
                    "lat":28.58
                },
            "main":
                {     
                 "temp":314.512,
                 "temp_min":314.512, 
                 "temp_max":314.512,
                 "pressure":988.93,
                 "sea_level":1012.81,
                 "grnd_level":988.93,
                 "humidity":30
                },
            "dt":1431935618,
            "wind":
                {
                  "speed":4.57,
                  "deg":283.501
                },
           "sys":
                {
                  "country":"IN"
                },
            "clouds":
                {
                    "all":0
                },
            "weather":
            [
                {
                 "id":800,
                 "main":"Clear",
                 "description":"Sky is Clear",
                 "icon":"01d"
                }
            ]
        }
    ]
*/
//-------------------------------------End Code--------------------------------------------


Public Class ShowWeatherData
{
  Public Class ShowWeather
  {
    Public String message{get;set;}
     Public String cod{get;set;}
      Public integer count{get;set;}
    Public ListResult[] xyz_list{get;set;}
  }
  
  public Class ListResult
  {
    Public String name{get;set;}
    Public String id{get;set;}
    public coordResult coord{get;set;}
  }
  
  public Class coordResult
  {
    public string lon{get;set;}
  }
}



SnapShot

Thanks
Sumit Shukla
sumitshukla.mca@gmail.com
skypeId: shuklasumit1
mob: 9711055997
cccinfotech.com






Comments

Popular posts from this blog

Salesforce Spring 16 Release Exam (Maintenance Exam Q&A) for Developer 201 Admin

Show Hyper Link On Add Error in Salesforce Trigger

Show the Success Message before Redirecting the Detail page on Visualforce Page