Ukázka práce s API

Instalace knihovny requests

Aktivujte si virtuální prostředí a v něm spusťte následující příkaz

(venv) > python -m pip install requests

Rozhraní aplikací dělané pro prohlížeč

Výstupem takových aplikací je směs kódu různých technologií (HTML, CSS, JS), který dokáže prohlížeč převést do grafické podoby a zobrazit uživateli přívětivou formou. Nicméně pro zpracování v aplikaci není tento výstup vhodný, protože obsahuje hromadu informací, které pro nás nemají žádnou hodnotu - jako například barvy písma, odsazení atp.

In [1]:
import requests

# Stažení stránky
stranka = requests.get('https://python.cz/')

# Ověření, že se vše povedlo
stranka.raise_for_status()

# Vypsání obsahu stránky
print(stranka.text)
<!doctype html>
<html lang="cs">
<head>
    <meta charset="utf-8">

    <link rel="shortcut icon" type="image/x-icon" href="/static/favicon.ico">
    <meta property="og:image" content="https://python.cz/static/images/logo-fb.png">

    <meta property="og:type" content="website">
    <meta property="og:url" content="https://python.cz/">

    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Arbutus+Slab&amp;subset=latin,latin-ext">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="/static/main.css">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->

    
    <title>Python, programovací jazyk</title>
    <meta property="og:title" content="Python, programovací jazyk">

    <meta name="description" content="Česká (a tak trochu i slovenská) komunita kolem programovacího jazyka Python.">
    <meta property="og:description" content="Česká (a tak trochu i slovenská) komunita kolem programovacího jazyka Python.">

</head>
    <body class="homepage">
        <!--
          This 'notice' is a temporary thing to advertise something to visitors of the site.
          Once the advertising period is over, it should be commented out. (Probably not worth
          deleting as we may need to advertise something in the future again.)
        -->
        
        <div class="notice">
            Byl(a) jsi někdy na Python srazu?
            Dej nám prosím <a href="https://pyvo.cz/feedback">zpětnou vazbu</a>!
        </div>
        

        <div class="container">
            
                <script>
                    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
                    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
                    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

                    ga('create', 'UA-1316071-13', 'auto');
                    ga('send', 'pageview');
                </script>
            

            <div class="header clearfix">
                <nav>
                    <ul class="nav nav-pills pull-right">
                        <li>
                        
                            <a href="/en/">
                                <i class="fa fa-globe"></i>
                                English, please!
                            </a>
                        
                        </li>
                    </ul>
                </nav>
                <p class="title">
                    <a href="/">
                        <img src="/static/images/logo-plain.png" height="30">
                        
                            Python v&nbsp;ČR
                        
                    </a>
                </p>
            </div>

            

            <div class="content">
                
    <div class="row logo">
        <h1 class="col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2 col-xs-8 col-xs-offset-2">
            <img alt="Python" src="/static/images/logo.svg" onerror="this.onerror = null; this.src = '/static/images/logo.png'">
        </h1>
    </div>
    <ul class="lead">
        <li>
            Python je&nbsp;moderní <strong>programovací jazyk</strong>.
            Je <strong>univerzální</strong> &ndash; pohání weby i&nbsp;rakety.
        </li>
        <li>
            Dobře se čte a dá se velice <strong>rychle naučit</strong>.
            Je skvělý pro <strong>výuku</strong> programování.
        </li>
        <li>
            <strong>Česká komunita</strong> je aktivní.
            Najdeš v ní <strong>pomoc, kamarády i práci</strong>.
        </li>
    </ul>

    <div class="row cartoon-container">
        <img class="cartoon" alt="Česká Python komunita" src="/static/images/czech-python-user-group.svg" onerror="this.onerror = null; this.src = '/static/images/czech-python-user-group.png'">
    </div>
    <div class="row communication">
        <a name="diskuse"><a name="discussions">
<a name="komunikace"><a name="communication">

<ul class="communication">
    <li class="communication-item">
        <a href="https://groups.google.com/group/django-cs/">
            <span class="communication-item-icon"><i class="fa fa-envelope"></i></span>
            <span class="communication-item-caption">
                E-mailová skupina django-cs
            </span>
        </a>
    </li>
    <li class="communication-item">
        <a href="http://www.py.cz/mailman/listinfo/python">
            <span class="communication-item-icon"><i class="fa fa-envelope"></i></span>
            <span class="communication-item-caption">
                E-mailová skupina na py.cz
            </span>
        </a>
    </li>
    <li class="communication-item">
        <a href="https://www.facebook.com/groups/pyonieri/">
            <span class="communication-item-icon"><i class="fa fa-facebook-official"></i></span>
            <span class="communication-item-caption">
                Skupina Pyonýři
            </span>
        </a>
    </li>
    <li class="communication-item">
        <a href="https://twitter.com/naPyvo">
            <span class="communication-item-icon"><i class="fa fa-twitter"></i></span>
            <span class="communication-item-caption">
                Srazy Pyvo
            </span>
        </a>
    </li>
    <li class="communication-item">
        <a href="https://twitter.com/PyConCZ">
            <span class="communication-item-icon"><i class="fa fa-twitter"></i></span>
            <span class="communication-item-caption">
                PyCon CZ
            </span>
        </a>
    </li>
    <li class="communication-item">
        <a href="https://twitter.com/Pyvec">
            <span class="communication-item-icon"><i class="fa fa-twitter"></i></span>
            <span class="communication-item-caption">
                Neziskovka Pyvec
            </span>
        </a>
    </li>
    <li class="communication-item">
        <a href="http://pyvec.slack.com/">
            <span class="communication-item-icon"><i class="fa fa-slack"></i></span>
            <span class="communication-item-caption">
                Organizační Slack
            </span>
        </a>
    </li>
    <li class="communication-item">
        <a href="irc://irc.freenode.net/python-cs">
            <span class="communication-item-icon"><i class="fa fa-slack"></i></span>
            <span class="communication-item-caption">
                IRC #python-cs
            </span>
        </a>
    </li>
    <li class="communication-item">
        <a href="irc://irc.freenode.net/django-cs">
            <span class="communication-item-icon"><i class="fa fa-slack"></i></span>
            <span class="communication-item-caption">
                IRC #django-cs
            </span>
        </a>
    </li>
</ul>
    </div>

    <div class="row" id="srazy">
        <div class="photo-container meetups-container">
            <div class="photo-collection">
                
                    <img class="photo" src="/static/photos/2015-11-14%2018.49.09.jpg">
                
                    <img class="photo" src="/static/photos/2015-11-15%2010.33.40.jpg">
                
                    <img class="photo" src="/static/photos/msene-lazne-2016-08-19%2015-44.jpg">
                
                    <img class="photo" src="/static/photos/msene-lazne-2016-08-19%2015-54.jpg">
                
                    <img class="photo" src="/static/photos/DSC_0106.JPG">
                
            </div>

            <div class="row">
                <div class="col-md-6 col-md-offset-3 meetups">
                    <h2>Srazy</h2>
                    <p>
                        <a href="https://pyvo.cz">Srazy Python programátorů</a> zvané <strong>Pyvo</strong> se pořádají po celé republice. Přijď si poslechnout <strong>přednášky</strong> od chytrých lidí a <strong>popovídat si</strong> nejen o Pythonu!
                    </p>
                    
    


<div class="row">
    <a class="meetups-city col-md-4 col-sm-4 col-xs-4" href="http://pyvo.cz/praha">
        <img src="/static/images/pyvo-praha.png" height="100">
        Praha
    </a>
    <a class="meetups-city col-md-4 col-sm-4 col-xs-4" href="http://pyvo.cz/brno">
        <img src="/static/images/pyvo-brno.png" height="100">
        Brno
    </a>
    <a class="meetups-city col-md-4 col-sm-4 col-xs-4" href="http://pyvo.cz/ostrava">
        <img src="/static/images/pyvo-ostrava.png" height="100">
        Ostrava
    </a>
</div>
                </div>
            </div>
        </div>
    </div>

    <hr class="visible-sm-block visible-xs-block">

    <div class="row boxes">
        <div id="blog" class="box col-md-4 col-sm-6">
            <div class="box-body">
                <div class="box-content">
                    <h2>
                        <i class="fa fa-newspaper-o"></i>
                        Blog
                    </h2>
                    <p>
                        Díky blogu se <strong>dovíš o všem, co se v české Python komunitě zrovna děje</strong>. A co je nejlepší &ndash; můžeš klidně přidat svůj vlastní článek!
                    </p>
                </div>
                <p class="call-to-action">
                    <a href="http://blog.python.cz" class="btn btn-primary">
                        <i class="fa fa-arrow-right"></i>
                        Chci být v obraze!
                    </a>
                </p>
            </div>
        </div>
        <div id="zacatecnici" class="box col-md-4 col-sm-6">
            <div class="box-body">
                <div class="box-content">
                    <h2>
                        <i class="fa fa-heart"></i>
                        Pro&nbsp;začátečníky
                    </h2>
                    <p>
                        Základy Pythonu se dají <strong>naučit i z prohlížeče</strong>. Máme pro tebe odkazy na výukové hry, online kurzy, videa, články, knihy a další.
                    </p>
                </div>
                <p class="call-to-action">
                    <a href="/zacatecnici/" class="btn btn-primary">
                        <i class="fa fa-arrow-right"></i>
                        Prahnu po vědění
                    </a>
                </p>
            </div>
        </div>

        <div class="clearfix visible-sm-block"></div>

        <div id="prace" class="box col-md-4 col-sm-6">
            <div class="box-body">
                <div class="box-content">
                    <h2>
                        <i class="fa fa-briefcase"></i>
                        Práce
                    </h2>
                    <p>
                        Jakou práci seženeš, když se naučíš Python? Kdo jej používá? Jak a kam napsat <strong>nabídku práce</strong> pro Pythonisty?
                    </p>
                </div>
                <p class="call-to-action">
                    <a href="/prace/" class="btn btn-primary">
                        <i class="fa fa-arrow-right"></i>
                        Nabízím, poptávám
                    </a>
                </p>
            </div>
        </div>

        <div class="clearfix visible-md-block"></div>

        <div id="zapojse" class="box col-md-4 col-sm-6">
            <div class="box-body">
                <div class="box-content">
                    <h2>
                        <i class="fa fa-bullhorn"></i>
                        Zapoj&nbsp;se!
                    </h2>
                    <p>
                        Pomoz nám <strong>rozšířit Python</strong> mezi ostatní. Pro lenochy s penězi máme <a href="https://www.fio.cz/scgi-bin/hermes/dz-transparent.cgi?ID_ucet=2600260438">číslo účtu</a>, ale spíš oceníme, když se <strong>chopíš nějakého úkolu</strong> a dotlačíš jej do konce. Věčná sláva zaručena! Pokud chceš zorganizovat sraz či workshop ve svém městě, koukni na <a href="http://pyvec-guide.readthedocs.io">příručku pro pořadatele</a>.
                    </p>
                </div>
                <p class="call-to-action">
                    <a href="/zapojse/" class="btn btn-primary">
                        <i class="fa fa-arrow-right"></i>
                        Toužím po věčné slávě
                    </a>
                </p>
            </div>
        </div>

        <div class="clearfix visible-sm-block"></div>

        <div id="konference" class="box col-md-4 col-sm-6">
            <div class="box-body">
                <div class="box-content">
                    <h2>
                        <i class="fa fa-comments"></i>
                        PyCon CZ
                    </h2>
                    <p>
                        Česká Python konference! Pomoz nám s přípravami, propagací, zkus si přihlásit přednášku nebo workshop, sponzoruj nás, nebo prostě jen přijď a akci si užij!
                    </p>
                </div>
                <p class="call-to-action">
                    <a href="http://cz.pycon.org" class="btn btn-primary">
                        <i class="fa fa-arrow-right"></i>
                        Hurá, konference!
                    </a>
                </p>
            </div>
        </div>
        <div id="knihovna" class="box col-md-4 col-sm-6">
            <div class="box-body">
                <div class="box-content">
                    <h2>
                        <i class="fa fa-book"></i>
                        Knihovna
                    </h2>
                    <p>
                        Máme knihovničku s literaturou o Pythonu a podobných technologiích. Knihy si lze <strong>zdarma půjčit</strong> &ndash; ozvi se a přijď si knížku vyzvednout na nejbližším <a href="#srazy">srazu</a>. Mimochodem, <a href="http://pythonbooks.revolunet.com/">Python Books</a> znáš, že?
                    </p>
                </div>
                <p class="call-to-action">
                    <a href="http://github.com/pyvec/bookshelf" class="btn btn-primary">
                        <i class="fa fa-arrow-right"></i>
                        Co si můžu půjčit?
                    </a>
                </p>
            </div>
        </div>
    </div>

            </div>

            <div class="row footer">
            
                <p class="col-sm-8">
                    Stránky spravuje nezisková organizace <a href="http://pyvec.org">Pyvec</a>. Pište na <a
                    href="mailto:info&#64;pyvec.org">info&#64;<!---->pyvec.org</a>, tweetujte na <a href="https://twitter.com/pyvec">@pyvec</a>.
                    <br>
                    Ilustrace kreslí <a href="http://honzajavorek.cz">Honza Javorek</a>.
                    Stránky hostujeme zdarma u <a href="https://rosti.cz">Roští.cz</a>.
                    Doménu python.cz zapůjčil <a href="http://xnet.cz/">KRAXNET</a>.
                    Děkujeme!
                </p>
                <p class="edit col-sm-4">
                    <a href="https://github.com/pyvec/python.cz/edit/master/pythoncz/templates/index_cs.html" class="btn btn-default">
                        <i class="fa fa-edit"></i>
                        Upravit tuto stránku
                    </a>
                </p>
            
            </div>

            <script src="https://code.jquery.com/jquery-1.10.1.min.js"></script>
            <script src="/static/permalinks.js"></script>
            
    <script src="/static/photos.js"></script>

        </div>
    </body>
</html>

API k testování

API k testování vytvořil Glutexo a obsahuje pro nás zajímavé informace nejen o českých prezidentech. Zdrojové kódy v jazyce Ruby jsou i s kompletním popisem API dostupné na GitHubu a API samotné pak na adrese http://pyladies-json.herokuapp.com/.

In [2]:
data = requests.get('http://pyladies-json.herokuapp.com/prezidenti/všichni')
data.raise_for_status()
print(data.text)
[{"jméno":"Tomáš Garrigue Masaryk","život":{"od":"1850-03-07","do":"1937-09-14"},"úřad":[{"od":"1918-11-14","do":"1935-12-14"}]},{"jméno":"Edvard Beneš","život":{"od":"1884-05-28","do":"1948-09-03"},"úřad":[{"od":"1935-12-18","do":"1938-10-05"},{"od":"1940-07-21","do":"1945-04-02"},{"od":"1945-04-02","do":"1948-06-07"}]},{"jméno":"Emil Hácha","život":{"od":"1872-06-12","do":"1945-06-27"},"úřad":[{"od":"1938-11-30","do":"1939-03-14"},{"od":"1939-03-15","do":"1945-05-09"}]},{"jméno":"Klement Gottwald","život":{"od":"1896-11-23","do":"1953-03-14"},"úřad":[{"od":"1948-06-14","do":"1953-03-14"}]},{"jméno":"Antonín Zápotocký","život":{"od":"1884-12-19","do":"1957-11-13"},"úřad":[{"od":"1951-03-21","do":"1957-11-13"}]},{"jméno":"Antonín Novotný","život":{"od":"1904-12-10","do":"1975-01-28"},"úřad":[{"od":"1957-11-19","do":"1968-03-22"}]},{"jméno":"Ludvík Svoboda","život":{"od":"1895-11-25","do":"1979-09-20"},"úřad":[{"od":"1968-03-30","do":"1975-05-28"}]},{"jméno":"Gustáv Husák","život":{"od":"1913-01-10","do":"1991-11-18"},"úřad":[{"od":"1975-05-29","do":"1989-12-10"}]},{"jméno":"Václav Havel","život":{"od":"1936-10-05","do":"2011-12-18"},"úřad":[{"od":"1989-12-29","do":"1992-07-20"},{"od":"1993-02-02","do":"2003-02-02"}]},{"jméno":"Václav Klaus","život":{"od":"1941-06-19","do":null},"úřad":[{"od":"2003-03-07","do":"2013-03-07"}]},{"jméno":"Miloš Zeman","život":{"od":"1944-09-28","do":null},"úřad":[{"od":"2013-03-08","do":null}]}]

Konverze na Pythoní objekt

In [3]:
import json

# Konverze z textového JSON formátu na Pythoní objekt
json_data = json.loads(data.text)

# Výpis dat
print(json_data)
[{'život': {'do': '1937-09-14', 'od': '1850-03-07'}, 'úřad': [{'do': '1935-12-14', 'od': '1918-11-14'}], 'jméno': 'Tomáš Garrigue Masaryk'}, {'život': {'do': '1948-09-03', 'od': '1884-05-28'}, 'úřad': [{'do': '1938-10-05', 'od': '1935-12-18'}, {'do': '1945-04-02', 'od': '1940-07-21'}, {'do': '1948-06-07', 'od': '1945-04-02'}], 'jméno': 'Edvard Beneš'}, {'život': {'do': '1945-06-27', 'od': '1872-06-12'}, 'úřad': [{'do': '1939-03-14', 'od': '1938-11-30'}, {'do': '1945-05-09', 'od': '1939-03-15'}], 'jméno': 'Emil Hácha'}, {'život': {'do': '1953-03-14', 'od': '1896-11-23'}, 'úřad': [{'do': '1953-03-14', 'od': '1948-06-14'}], 'jméno': 'Klement Gottwald'}, {'život': {'do': '1957-11-13', 'od': '1884-12-19'}, 'úřad': [{'do': '1957-11-13', 'od': '1951-03-21'}], 'jméno': 'Antonín Zápotocký'}, {'život': {'do': '1975-01-28', 'od': '1904-12-10'}, 'úřad': [{'do': '1968-03-22', 'od': '1957-11-19'}], 'jméno': 'Antonín Novotný'}, {'život': {'do': '1979-09-20', 'od': '1895-11-25'}, 'úřad': [{'do': '1975-05-28', 'od': '1968-03-30'}], 'jméno': 'Ludvík Svoboda'}, {'život': {'do': '1991-11-18', 'od': '1913-01-10'}, 'úřad': [{'do': '1989-12-10', 'od': '1975-05-29'}], 'jméno': 'Gustáv Husák'}, {'život': {'do': '2011-12-18', 'od': '1936-10-05'}, 'úřad': [{'do': '1992-07-20', 'od': '1989-12-29'}, {'do': '2003-02-02', 'od': '1993-02-02'}], 'jméno': 'Václav Havel'}, {'život': {'do': None, 'od': '1941-06-19'}, 'úřad': [{'do': '2013-03-07', 'od': '2003-03-07'}], 'jméno': 'Václav Klaus'}, {'život': {'do': None, 'od': '1944-09-28'}, 'úřad': [{'do': None, 'od': '2013-03-08'}], 'jméno': 'Miloš Zeman'}]

Použití výstupu pro zpracování dat v programu

In [4]:
data = requests.get('http://pyladies-json.herokuapp.com/prezidenti/1945-05-01')
data.raise_for_status()

prezidenti = json.loads(data.text)

for prezident in prezidenti:
    print('Prezident {} žil od {} do {}'.format(prezident['jméno'], prezident['život']['od'], prezident['život']['do']))

    print('Období úřadu prezidenta: {}'.format(prezident['jméno']))
    for obdobi in prezident['úřad']:
        print('Od {} do {}'.format(obdobi['od'], obdobi['do']))
Prezident Emil Hácha žil od 1872-06-12 do 1945-06-27
Období úřadu prezidenta: Emil Hácha
Od 1939-03-15 do 1945-05-09
Prezident Edvard Beneš žil od 1884-05-28 do 1948-09-03
Období úřadu prezidenta: Edvard Beneš
Od 1945-04-02 do 1948-06-07