python-requests:
python-requests - позволяет python общаться с веб-серверами по протоколу http apt-get install install python-requests Проверка работы библиотеки python >>> import requests - импортировать библиотеку >>> r = requests.get('http://www.google.com/') - выполнить запрос >>> r.status_code - узнать ответ >>> r.text - посмотреть что прислал сервер
Ответы сервера:
200 - успешно 301 - переехал навсегда 302 - переехал временно 401 - нет прав на доступ 404 - не найдено 500 - ошибка на сервере
API
Application programming interface - позволяет разному софту взаимодействовать друг с другом и часто используется для обмена данными через интернет. http://api.wunderground.com/api/API_key/forecast/q/CA/San_Francisco.json - пример Несмотря на то,что J - означает JavaScript, JSON используется во многих языках программирования, особенно для взаимодействия приложений через API
Кусок ответа от API Weather Underground:
"response": { "version": "0.1", "termofService": "http://www.wunderground.com/weather/api/d/terms.html", "features": { "forecast": 1 } }, "forecast": { - корневой элемент структуры данных "txt_forecast": { - внутри forecast нас интересует txt_forecast "date":"10:00 AM EST", "forecastday": [ - внутри txt_forecast нас интересует forecastday { "period":0, "icon":"partlycloudy", "icon_url":"http://icons-ak.wxug.com/i/c/k/ psrtlycloudy.gif", "title":"Tuesday", "fcttext": "Party cloud.Nigh of 9C." - это и есть наш прогноз в текстовом формате "fcttext_metric":"Partly cloudy. High of 48F. Winds from the NNE at to 15 km/h.", "pop":"0" },
Создадим файл text-forecast.py:
nano text-forecast.py --------------------- import requests key = 'Вставь свой api ключ сюда' - сюда вставим наш ключ API ApiUrl = \ 'http://api.wunderground.com/api' + key + \ '/forecast/q/NY/New_York.json' r = requests.get(ApiUrl) - получаем прогноз для New_York forecast = r.json - берем текст ответа и делаем из него объект-словарь print forecast['forecast']['txt_forecast']['forecastday'][0]['fcttext'] - добираемся до нашего прогноза ---------------------
Создадим файл umbrella-indecator.py
nano umbrella-indecator.py -------------------------- import requests import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(25, GPIO.OUT) key = 'Вставь свой api ключ сюда' - сюда вставим наш ключ API ApiUrl = \ 'http://api.wunderground.com/api' + key + \ '/forecast/q/NY/New_York.json' while True: r = requests.get(ApiUrl) - получаем прогноз для New_York forecast = r.json - берем текст ответа и делаем из него объект-словарь popValue = forecast['forecast']['txt_forecast']['forecastday'][0]['pop'] - считываем возможность выпадения осадков popValue = int(popValue) - конвертируем переменную popValue из строки в число if popValue >= 30: - если значение больше 30 включаем светодиод GPIO.output(25, GPIO.HIGH) else: - если popValue < 30 отключаем светодиод GPIO.output(25, GPIO.LOW) time.sleep(180) - ждем 3 минуты и повторяем снова --------------------------
Популярные API:
https://developers.facebook.com http://flickr.com/service/api/ https://developer.foursquare.com/ https://github.com/reddit/reddit/wiki/API http://www.twillo.com https://dev/twitter.com https://developers.google.com/youtube/
Веб-фреймворк Flask (Веб сервер на python)
http://flask.pocoo.org/ apt-get install python-pip pip install flask nano hello-flask.py - создадим проверочный файл ------------------- from flask import Flask app = Flask(__name__) - создаем объект и называем его app @app.route("/") - запускаем код который идет ниже когда кто то пытается получить доступ к корню веб сервера def hello(): return "Hello World!" - посылаем клиенту строку Hello World! if __name__ == "__main__": - если скрипт запущен из командной строки... app.run(host='0.0.0.0', port=80, debug=True) - запустить сервер на 80 порту и сообщать о всех ошибках -------------------- Шаблон запросов Jinja2 Позволяет вам помечать маркерами те места в HTML файлах, в которые будет вставлено динамическое содержимое. http://jinja.pocoo.org/docs/templates Пример динамической страницы: nano hello-template.py ---------------------- from flask import Flask, render_template import datetime app = Flask(__name__) - создаем объект и называем его app @app.route("/") - запускаем код который идет ниже когда кто то пытается получить доступ к корню веб сервера def hello(): now = datetime.datetime.now() timeString = now.strftime("%Y-%m-%d %H:%M") templateData = { 'title' : 'HELLO', 'time' : timeString } return render_template('main.html', **templateData) - посылаем клиенту динамическую страницу if __name__ == "__main__": - если скрипт запущен из командной строки... app.run(host='0.0.0.0', port=80, debug=True) - запустить сервер на 80 порту и сообщать о всех ошибках ---------------------- nano main.html --------------{{ title }} - заголовок страницыHello, World!
The date and time on the servers is: {{ time }} - выводим переменную