LABA 120 - Get запрос из MIt APP Invertor 2

компонент Tiny web db не всегда работает но выход есть

Омск, начало 12-07-2017





картинка 00


Всем хорош Tiny WebDB Service в App Inventor2, задал урл, задал TAG, еще VALUE
считал или сохранил. Одно плохо работает хреново
на момент написания. все чаще на запрос, приходит тоскливая месага

We're sorry...

... but your computer or network may be sending automated queries.
To protect our users, we can't process your request right now.

а так хочется передавать параметры или данные через интернет, милое дело!
В любой точке мира, с любого устройства ,
можно получить информацию с датчиков, или еще с чего



Но как поется в клевой песенке - а у нас все пучком
где не пройдем прямо, пролезем боком
или еще из более древних источников - умный в гору не пойдет,
обойдем и мы это легкое недоразумение, применив обычный Url с Get запросом
из компонента WebViewer, все той же среды MIt APP Invertor 2

кто не помнит, вкратце, выглядит он так (к примеру)-
http://yandex.com/?TAG=222&VALUE=aaa


где TAG и VALUE переменные а через знак = их значения
длинна их разумеется не бесконечна но нам хватит
*** так, на всякий случай, регистр букв имеет значение

С бацаем легонький софт для наглядности описанного (не путать с о писаным)
Тема состоит из двух частей, одна вертится как вы догадались,
на девайсе с системой Андроид (типа передатчик)
А другая часть базируется на веб сервере, локальном или другом (приемник). И коде на PHP
так как PHP для меня не родной язык. На нем не говорю, только читаю, и то со словарем.
Программа на нем будет проще не куда, а нужные функции легко нарыть в интернете

Суть такова, Телефон, или что то близкое к нему по духу,
склеивает из текстовых полей, заполнеными пользователем или, програмой
GET запрос, и через компонент WebViewer обращается к серверу.

Веб сервер, выуживает переменые из запроса, посредством PHP.
И сохраняет на диск сервера,
В созданый файл с именем, из переменной TAG, значение из переменной VALUE.

Или если это операция получения данных, То считывает из файла "TAG"
и отправляет его телефону

Все это дело проверялось (и работало) на локальном USB web Server
а также на бесплатном веб хостинге Галактика .
Однако, из за разных настроек веб серверов, где то может сразу не заработать,
придется крутить настройки сервера, в области PHP.INI

И еще один момент с хостингами, Был у меня один опыт
с передачей даных, так после него. сайт перестал отзываться
и даже FTP заткнулось, так что аккуратнее с нагрузками.

что бы не набирать все по новой, исходник можно взять тут

а что бы просто посмореть, можно установить готовый APK от сюда

и так погнали

вот зкран адроид девайса на котором будет происходить действие


картинка 02

четыре текстовых поля
URL1
URL2
TAG
VALUE


четыре кнопки
SET
Get
SET URL1
SET URL2


и пятая HIDE так для балдежа

несколько label , поясняющие че к чему
компонент WebViewer , для работы с интернетом
и clock1, для задерки на время выпонения запроса

Тут все просто, теперь переходим к програмным блокам


картинка 03

все блоки оптом


на первый взгляд многовато но не пугайтесь, в своем софте оставите
только нужные




картинка 04

Переменные и инициализация приложения

Здесь тема такая -

1 - текстовая переменная , в которую собирается весь GET
запрос из нескольких текстовых полей

2- переменная URL в короторой будет урл сервера
зачем их две? да чтобы легко переключать при отладке, Ибо геморойно
набирать каждый раз http://localhost:8888/ при смене адреса, тем более на зкранной клавиатуре
у меня здесь адрес локального веб сервера (об этом ниже)
и бесплатного веб хоста с поддержкой PHP, galaxydata.ru
все конечно догадались, что PHP нужен для обработки GET запроса

3- соответственно хранит какой УРЛ на данный момент действующий

4- событие которое возникает при инициализации приложения

Screen1 initialize

, тьфу, если проговорить язык сломаешь

5- интервал тиканья таймера, 1000 = 1 секунда, вот и прикиньте

6- пока таймер не запускаем, не зачем

7- Call Read, считывает переменные из памяти андроид устройства
дело в том , что бы каждый раз после запуска программы не набирать значения TAG, VALUE итп
все текстовые поля, сохраняются в памяти девайса, при нажатии кнопок SET или GET
функцией SAVE, о них будет ниже.

8,9,10,11- блок IF проверяет какой URL был выбран последним и в соответствии
присваивает переменной URL нужное значение, затем раскрашивает кнопки
выбора УРЛ в заметные цвета

12- все тоже,только наоборот

13- присваивает компоненту WebViewer, URL

14 - перходит по указаному адресу


ЗАПРОС на передачу данных



картинка 06

1 - Глобальная переменная ZAPROS в которую посредством блока JOIN (2)
собирается вся строка УРЛ

3 - Глобальная переменная URL, к которой приклеивается остальной обвес из
GET переменных, а УРЛ у нас два на выбор

4 - IN.PHP?t= , файл с программой на PHP который обработает запрос.
Здесь т, это конечно TAG кастрированый до одной буквы, в следствии давней
дурной привычкой не делать лишних движений

5 - далее подклеивается значение из текстового поля t1_tag
Тут пришлось отступить от однобуквенных принципов,
Потому что форма, и код находятся на разных страницах свйта
и крайне тяжело, найти среди блоков MIT APP invertor2,
нужный, по стандартному названию

6 - &v= , как все догадались это VALUE

7 - и ее значение из t1_data

8 - отправляем WebViewer по указаному адресу (9)

10 - в лабел статус L_STATUS записываем все строку запроса
дабы видеть что же такое мы отправили, на случай поиска ошибок

11 - вызываем процедуру SAVE, которая сохраняет в память телефона
наши переменные. на случай повторного использования, после перезапуска программы

ЗАПРОС на получение данных



картинка 07

1,2,3,4,5 - как и в пердъидущем случае собираем строку запроса
только на этот раз программа обработчик OUT.PHP , и пременная одна, TAG,

6,7 - Отправляем запрос

8 - запускаем таймер Clock1, который отсчитает нужную задержку,
потому что ответ придет не сразу

9 - а пока выведем строку запроса, убедимся какая она красивая

10 - и снова сохраняются переменные

11 - если кто не догадался, то это процедура нажатия кнопки


Получение данных



картинка 08

1 - Процедура Clock1 обрабатывается с интервалом заданым нами ранее, 1500 припоминаете?

2 - что бы нам не было скучно ждать, а так же быть в курсе что софт наш не завис
в лабел l_count увеличивается значение с каждым кликом

3 - блок IF тем временем эпизодически проверяет свойство CurrentPageTitle
блока WebViewer (4), и если тот не равен пустой строке, присваивает этот CurrentPageTitle
текстовому полю t1_data (5). и останавливает таймер Clock1

зачем этот CurrentPageTitle?, пока что это единственное место в блокеWebViewer
MIT APP invertor2 , от куда удалось получить принятые данные

Что еще по телефонной части?

сохранение состояния приложения



картинка 05

1 - Процедура SAVE сохраняет состояние программы с помощью элемента
TinyDB , из набора MIT App Invertor 2

2 - Переменная сохраняется в базу аппарата, в виде TAG ValueToStore
и так для каждой переменной

Считывание состояния приложения



картинка 07a

все тот же TinyDB , из набора MIT App Invertor 2
только в обратном порядке, плюс значение по умолчанию
если до этого ни чего не сохраняли

вообще этот TinyDB замечательная вещь, сколько бы вы не правили свою программу
при установке ее на аппарат, база сохраняется, да вы наверно видели это сообщение

хитрая кнопка



картинка 09

сворачивает окно с экрана, в зависимости от модели устройства поведение может быть, (и будет)
разным. Вообще андроид девайсы хоть и похожи внешне, системы у них отличаются
и софт работающий замечательно на одном, может показать другие результаты, на другом аппарате.
Это касается доступа программы к железу устройства, например к датчику температуры батареи
, и только опыт, сын ошибок трудных. поможет в данном случае

Продолжаем наш концерт!

Web Server и PHP



картинка 10

не требует устанвки работает легко и непринужденно вещь бесплатная, вот сайт програмы, скачаете баз проблем. для описаного деиствия ни каких настроек в плане PHP.INI не потребовалось, указываете Порт, Папку, и вперед

На внешних хостерах, регистрация и настройки как повезет
К примеру Галактика тоже не сильно замороченый



картинка 11

содержимое ROOT

INDEX.HTML - страница просмотра, ее можно посмотреть здесь На ней можно сохранть или прочитать TAG, И если занести этот УРЛ в телефон то будет также работать
IN.PHP - об этом уже писано
OUT.PHP
11.txt , 33ffЕ•f.txt, Следы былых запросов

Содержимое файла IN.PHP

Можно просто скопировать и сохранить

********************************************************* <html> <head> <meta charset='utf-8/'> <title> LABA 120 - in.php</title> <!-- До сюда нам неважно--> <?php $t=$_GET['t']; // Отлавливается переменная TAG $v= $_GET['v']; // и Переменная VALUE $fln=$t.".txt"; //Создается файл из переменной TAG в конец приделывается txt $fd = fopen($fln, 'w'); // Открывается файл типа TAG.TXT fwrite($fd, $v); // В него записывается VALUE fclose($fd); // Файл закрывается $title = '<title>'.'> '.$fd .'</title>'; // В ТЕГ <TITLE> заносится инфа для ответки echo $title ; // ну и выводится как положено ?> </head> <body> <h1>Save OK!</h1> <br> <?php echo $v; ?> <!-- А тут выводится на страницу значение VALUE --> </body> </html> *********************************************************

к слову сказать, вывод в <title> не у всех удается
если поискать в Яндексе , то тот просто пестрит вопросами -КАК -Почеу
видимо какие то настройки PHP на это влияют


Содержимое файла OUT.PHP

Можно просто скопировать и сохранить

********************************************************* <html> <head> <meta charset='utf-8/'> <title> LABA 120 - out.php</title> <?php $t=$_GET['t']; // Отлавливается переменная TAG $fln=$t.".txt"; // Создается Имя файла из переменной TAG в // конец приделывается txt if (file_exists($fln)) { // проверяется существование файла типа TAG.TXT $fd = fopen($fln, 'r'); // если существует то открывается на чтение while(!feof($fd)) // проверяется достигнут ли конец файла { $str = htmlentities(fgets($fd)); // считывается содержимое файла в переменную } // не давая проникнуть HTML кодам в нее // типа защита от хакеров fclose($fd); // Файл закрывается } else { // Если файл не существует в переменную заносится другое значение $str = 'no'; } $title = '<title>'.$str .'</title>'; // В ТЕГ <TITLE> заносится инфа для ответки echo $title ; // ну и выводится как положено ?> </head> <body> <h1>Value</h1> <br> <?php echo $str; ?> <!-- А тут выводится на страницу значение VALUE --> </body> </html> *********************************************************

Кому влом копипастить, файлы можно взять тут


Окинув взглядом на последок сей мануал, взяло меня сомнение
- не многовато ли букф? для тех кто в теме происходящего повторю саму суть

запрос - таймер - результат

и на последок, если не принять мер, то папка ROOT на сервере скоро примет жуткий вид
тут можно попробовать сортировать файлы по папкам, добавив тег USER
или вообще использовать базу MySql на сервере
возможно в последствии я освещу эту тему



картинка 12

Вопросы можно задать

тут