[исходный код проекта можно скачать здесь]
Иногда для приложения требуется возможность работы с веб-содержимым. Будто чат, парсер RSS или клиент версия сайта. В этом примере мы рассмотрим простейшую возможность обработки GET запроса.
Создадим новый проект в Clickable, в терминале вводим команду:
clickable create
Выбираем тип проекта Python и заполняем:
Title [App Title]: Example Web
App Name [appname]: example-web
Удаляем все лишнее в Main.qml и приводим к виду:
Page {
anchors.fill: parent
header: PageHeader {
id: header
title: i18n.tr('Example Web')
}
Label {
id: label1
anchors {
top: header.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
}
text: 'Get Web'
verticalAlignment: Label.AlignVCenter
horizontalAlignment: Label.AlignHCenter
}
}
Добавим обработчик Python:
Python {
id: python
Component.onCompleted: {
addImportPath(Qt.resolvedUrl('../src/'));
importModule('example', function() {
python.call('example.speak',[], function(returnValue) {
console.log(returnValue);
label1.text=returnValue;
})
});
}
onError: {
console.log('python error: ' + traceback);
}
}
Таким образом, после исполнения Python кода, мы выведем это содержимое в Label.
Теперь переходим в папку src и редактируем example.py:
import urllib3
def speak():
http = urllib3.PoolManager()
try:
source = http.request('GET', 'http://webcode.me')
except Exception as e:
return str(e)
else:
html_str = source.data.decode('utf-8')
return html_str
Теперь если мы запустим этот код на телефоне, то мы получим ошибку:
HTTPConnectionPool(host='webcode.me', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0xa8111390>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',))
Все это связано с защитой Ubuntu Toch от того, что бы приложения не творили лишнего 😁
В папке с проектом находим _.apparmor и добавляем в него новые привилегии(разрешения):
{
"policy_groups": [
"content_exchange",
"content_exchange_source",
"networking",
"webview"
],
"policy_version": 16.04
}
Хоть этот файл и в формате JSON, почему то количество пробелов здесь важно. Поэтому, если какие то разрешения не получены вашим приложением, то проверьте пробелы или напишите их в одну строку.
Теперь мы можем скомпилировать и запустить нашу программу.