1. Forum używa plików Cookies. Dowiedz się więcej o celu ich używania i możliwości zmiany ustawień Cookies w przeglądarce. Czytaj więcej...

[PHP] Integracja z Live API

Dyskusja w 'Kursy i poradniki - twórczość własna' rozpoczęta przez użytkownika antyhelion, 1 Grudzień 2015.

  1. antyhelion

    antyhelion Nowicjusz

    Wiadomości:
    20
    Docenione treści:
    13
    Cześć!

    Wczoraj klasa do obsługi Google API, to dzisiaj w ramach uczciwej konkurencji, moja autorska klasa do obsługi Live API, Microsoftu. Również na przykładzie logowania, ale nic nie stoi na przeszkodzie, aby zmienić "scope" i pobrać kalendarz, lub inne dane z konta. Tak więc... tworzymy plik, np. Live_API.php, a w nim:
    PHP:
    <?php

        define
    ('LIVE_CLIENT_ID''Twoje ID aplikacji Live');
        
    define('LIVE_CLIENT_SECRET''Twój sekretny klucz');

        class 
    Live_API
        
    {
            public function 
    __construct($redirect_uri null)
            {
                
    $this->redirect_uri urlencode($redirect_uri);
                
    $this->client_id LIVE_CLIENT_ID;
                
    $this->client_secret LIVE_CLIENT_SECRET;
            }

            public function 
    Dialog($scope 'wl.basic wl.emails wl.calendars wl.contacts_emails')
            {
                return 
    sprintf("https://login.live.com/oauth20_authorize.srf?client_id=%s&scope=%s&response_type=code&redirect_uri=%s",
                    
    $this->client_id$scope$this->redirect_uri
                
    );
            }

            public function 
    GetAccessToken()
            {
                if (
    $this->IsAccessToken() === true) {
                    return 
    $_COOKIE['LIVE_ACCESS_TOKEN'];
                }

                
    $source sprintf("https://login.live.com/oauth20_token.srf?client_id=%s&redirect_uri=%s&client_secret=%s&code=%s&grant_type=authorization_code",
                    
    $this->client_id$this->redirect_uri$this->client_secret$_GET['code']
                );

                
    $response json_decode(file_get_contents($source), true);
                if (!isset(
    $response['access_token'])) {
                    return 
    0;
                }

                
    setcookie('LIVE_ACCESS_TOKEN'$response['access_token'], time() + 3600'/'$_SERVER['SERVER_NAME']);
                return 
    $response['access_token'];
            }

            public function 
    Get($graph 'me')
            {
                
    $access_token $this->GetAccessToken();
                if (empty(
    $access_token)) {
                    return array();
                }

                
    $source sprintf("https://apis.live.net/v5.0/%s?access_token=%s"$graph$access_token);
                
    $response file_get_contents($source);

                return 
    json_decode($responsetrue);
            }

            public function 
    IsAccessToken()
            {
                if (isset(
    $_COOKIE['LIVE_ACCESS_TOKEN'])) {
                    return 
    true;
                }

                return 
    false;
            }
        }
    Tworzymy teraz plik live.php, a wykorzystanie, może wyglądać np. tak:
    PHP:
    <?php

        ob_start
    ();

        include_once(
    'Live_API.php');
        
    $oLive_API = new Live_API('http://twoja-strona.com/live.php');

        if (!isset(
    $_GET['code']) AND $oLive_API->IsAccessToken() === false) {
            
    $dialog $oLive_API->Dialog();
            
    Header('Location: ' $dialog); exit;
        }

        
    $graph $oLive_API->Get();

        if (!isset(
    $graph['emails']['account'])) {
            
    // Jeżeli nie udało się pobrać danych
        
    }

        
    // Wyświetlamy pobranego maila
        
    echo $graph['emails']['account'];

    Przykładów wykorzystania, może być wiele :)

    Pozdrawiam,
    Rafał
     
    Mariusz i TheL lubią to.
  2. TheL

    TheL @Lider VIP Moderator forum

    Wiadomości:
    2 350
    Docenione treści:
    511
    Bardzo fajne i proste rozwiązanie napisane spójnie z tym od API google. Można je wykorzystać w prosty sposób i uatrakcyjnić sposób korzystania ze strony. Dzięki za klasę :) Czekam na więcej :)
     

Poleć forum znajomym