NetTalk - GetWeather example

Программы на Clarion, шаблоны, библиотеки и пр.

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

NetTalk - GetWeather example

Сообщение morkovin »

Clarion 6.9049. C10 ABC
У кого-нибудь этот пример работает? Пробовал и NetTalk6 и в NetTalk8. Не работает.
Raw send

Код: Выделить всё

GET //globalweather.asmx/GetWeather?CityName=Moscow&CountryName=Russia HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Accept-Language: en
Content-Type: application/x-www-form-urlencoded
Accept-Encoding:  gzip
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16 ( .NET CLR 3.5.30729; .NET4.0C)
Host: www.webservicex.net
Connection: Keep-Alive
Raw receive

Код: Выделить всё

HTTP/1.1 404 Not Found
Server: nginx/1.4.6 (Ubuntu)
Date: Wed, 11 Jul 2018 06:10:26 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 53
Connection: keep-alive
{"code":"PAGE_NOT_FOUND","message":"Page not found"}
Есть другие варианты, как из Клариона обратиться к Web-service?
WBR, morkovin
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

NetTalk - GetWeather example

Сообщение PavelNK »

Дело не в Кларионе, судя по всему сервис не работает или что-то поменялось
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

NetTalk - GetWeather example

Сообщение morkovin »

Да, действительно что-то поменялось.
Короткий пример на node.js выдаёт тот же результат:{"code":"PAGE_NOT_FOUND","message":"Page not found"}

Код: Выделить всё

var http = require('http');
http.post = require('http-post');
var url =
 'http://www.webservicex.net/globalweather.asmx/GetCitiesByCountry';
var CountryName = 'Russia';
http.post (url, {CountryName:CountryName}, function(res) {
res.setEncoding('utf8');
res.on('data', function(chunk) {
    console.log(chunk);
});
})
WBR, morkovin
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

NetTalk - GetWeather example

Сообщение Admin »

Там сервис сломали что ли. Ссылки на API у них вроде другие стали.
Может к Кладру подвязаться: https://kladr-api.ru/integration/
или к вконтактику: https://vk.com/dev/database.getCities
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

NetTalk - GetWeather example

Сообщение morkovin »

Может к Кладру подвязаться: https://kladr-api.ru/integration/
Получилось! На простой запрос:

Код: Выделить всё

const kladrApi = require("kladrapi-for-node");
// для бесплатной версии
const Kladr = new kladrApi();
q = {query: 'волг', regionId: '3400000000000', contentType: 'city', withParent: 0, limit: 5};
//q = {query: 'Ряз',  contentType: 'region', withParent: 0, limit: 5};

Kladr.getData(q, (err, result)=>{
   textChunk = result.toString('binary');
    console.log(err, result);
});
Получаю ответ:

Код: Выделить всё

null { searchContext: 
   { contentType: 'city',
     regionId: '3400000000000',
     query: 'волг',
     limit: 5 },
  result: 
   [ { id: '3400000100000',
       name: 'Волгоград',
       zip: 400038,
       type: 'Город',
       typeShort: 'г',
       okato: '18401000000',
       contentType: 'city' },
     { id: '3401000000800',
       name: 'Волгодонской',
       zip: 404541,
       type: 'Поселение',
       typeShort: 'п',
       okato: '18216832001',
       contentType: 'city' },
     { id: '3401000000900',
       name: 'Отделение N 2 Совхоза Волго-Дон',
       zip: 404545,
       type: 'Поселение',
       typeShort: 'п',
       okato: '18216844002',
       contentType: 'city' },
     { id: '3400000109900',
       name: 'Волгострой',
       zip: 400067,
       type: 'Хутор',
       typeShort: 'х',
       okato: '18401370000',
       contentType: 'city' } ] }
осталось совсем ничего - наладить обмен node.js+Clarion (либО через сокеты ) , распарсить ответ, разобраться с перекодировками :cry:
WBR, morkovin
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

NetTalk - GetWeather example

Сообщение Yufil »

Работал с web-сервисами напрямую из Клариона по протоколу SOAP, слегка модифицировав класс chttp . Можно, наверное, чуть допилить и json переправить...
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

NetTalk - GetWeather example

Сообщение morkovin »

распарсить ответ
Оказалось проще, чем я думал:

Код: Выделить всё

const kladrApi = require("kladrapi-for-node");
var parseJson = require("parse-json");
const Kladr = new kladrApi();
var textChunk='';
//must be receive from Clarion
q = {query: 'волг', regionId: '3400000000000', contentType: 'city', withParent: 0, limit: 10};
//---------------------------------
Kladr.getData(q, (err, result)=>{
   var js1 = JSON.stringify(result);
   var pos=js1.search('result');
   if (pos > 0) {
   textChunk=js1.slice(pos+8, js1.length-1);
   var out=JSON.parse(textChunk);
   var cnt=out.length;
   console.log('found: '+cnt);
   for(var i = 0; i < cnt; i++) {
     console.log(out[i]["name"]);  //will be send to clarion
    }
   }
});
ответ:

Код: Выделить всё

ound: 4
Волгоград
Волгодонской
Отделение N 2 Совхоза Волго-Дон
Волгострой
остались сокеты...
WBR, morkovin
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

NetTalk - GetWeather example

Сообщение morkovin »

Здесь фильтр по 34-му региону (но это уже детали):

Код: Выделить всё

const kladrApi = require("kladrapi-for-node");
var parseJson = require("parse-json");
const Kladr = new kladrApi();

var net = require('net');
var windows1251 = require('windows-1251');
var textChunk='';
var Chunk='';
var js0='';
var server = net.createServer(function(socket) {
  socket.on('data', function(data){
     textChunk = data.toString('binary');
     //console.log(textChunk);
     Chunk=windows1251.decode(textChunk);
     //console.log(Chunk); 
    if (Chunk.length > 50) {
       js0 = JSON.parse(Chunk); 
       var myMSGTEXT=JSON.stringify(js0.CMDDATA.MSGTEXT);
		console.log('MSGTEXT: '+myMSGTEXT);
      //must be receive from Clarion
      var q = {query: 'волг', regionId: '3400000000000', contentType: 'city', withParent: 0, limit: 10};
      var qs=JSON.stringify(q);
	  qs=JSON.parse(qs);
	  qs.query=myMSGTEXT;
      console.log('qs.query: '+qs.query);
    }	  
//---------------------------------
  Kladr.getData(qs, (err, result)=>{
   var js1 = JSON.stringify(result);
   var pos=js1.search('result');
   if (pos > 0) {
   textChunk=js1.slice(pos+8, js1.length-1);
   var out=JSON.parse(textChunk);
   var cnt=out.length;
   console.log('found: '+cnt);
   for(var i = 0; i < cnt; i++) {
     //console.log(out[i]["name"]);  //will be send to clarion
	    js0.CMDDATA.MSGTEXT=js0.CMDDATA.MSGTEXT+'; '+out[i]["name"];
    }
		Chunk=JSON.stringify(js0);
		//console.log(js0.CMDDATA.MSGTEXT);
		socket.write(Chunk.toString('binary')); //utf8
   }
   });  //kladr.getData
  });  //socket on
});  //create Server

server.listen(1337, '127.0.0.1');
для сокетов подрихтовал пример QuckChat. Работает! (см скрин в аттаче)
Вложения
19.07.png
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

NetTalk - GetWeather example

Сообщение Дед Пахом »

morkovin писал(а): 19 Июль 2018, 21:34 var qs=JSON.stringify(q);
qs=JSON.parse(qs);
а это зачем? И вообще, что всё это (весь код) значит?
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

NetTalk - GetWeather example

Сообщение morkovin »

var q = {query: 'волг', regionId: '3400000000000', contentType: 'city', withParent: 0, limit: 10};
Как в этой строке использовать переменные ? (ну я не настолько силен в node.js)
А вот так получается:

Код: Выделить всё

 var qs=JSON.stringify(q);
	  qs=JSON.parse(qs);
	  qs.query=myMSGTEXT;
далее можно добавить:
qs.regionId=myRegionId ;
qs.contentType=myCT;
и т.д. в результате формируем правильный запрос к KLADR API.
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

NetTalk - GetWeather example

Сообщение Дед Пахом »

Я хочу сказать, что может быть всё это выкладывать на форуме node.js?
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

NetTalk - GetWeather example

Сообщение finsoftrz »

Ребят, а зачем такие извраты с js и nettalk? Просто пишем несколько строк на php и вызываем из своего приложения через win api. Результат получаем в виде строки, уже не раз обсуждали на этом форуме. Пример кода на php, думаю, гуглится на раз. А иметь хостинг с php для разработчика или конторы - это сейчас как платочек в кармане для джентельмена...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

NetTalk - GetWeather example

Сообщение morkovin »

хостинг с php для разработчика или конторы - это сейчас как платочек в кармане для джентельмена...
Слабый аргумент для бюджетной организации.
С php я как-то не подружился, а node.js использую активно для своих служебных задач.
WBR, morkovin
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

NetTalk - GetWeather example

Сообщение PavelNK »

Зачем мудрить, из Клаши все отлично тянется, из любых SOAP-ов и прочих сервисов
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

NetTalk - GetWeather example

Сообщение finsoftrz »

У меня 2 аргумента в пользу работы через php. Не надо клиентам обновлять программы, положил один php файлик, все через него работают без лишних подробностей. Поменялось что в сервисе, поменяли в одном месте. Все равно в интернет лезем. Ну и второе, примеры кода на php найти можно за пару минут, а прикрутить аналогичное на кларионе думать надо...
C6/C11, ШВС, tps/btrieve.
Ответить