Реальное задание!

Автор Catcatcat, 23-08-2011, 17:37:39

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Catcatcat

Цитата: Proydoha от 23-10-2011, 22:40:13
А можно заказать программу? : D

Короче, что б она переименовывала все файлы в папке по такому шаблону:

Было: имяимяимя_дд.мм.гггг.тип
Стало: гггг.мм.дд_имяимяимя.тип
Посмотри Total Commander там есть групповое переименование файлов.

Sasha

Цитата: Proydoha от 24-10-2011, 01:18:49
Споткнулся о файлы с некоторыми именами.
Конечно все гораздо усложняется, но попробовать сделать по другому могу. Нужно?
skype: ab.sasha

Proydoha

Цитата: Sasha от 24-10-2011, 09:53:49
Конечно все гораздо усложняется, но попробовать сделать по другому могу. Нужно?

Не, я огорчился до глубины души от осознания того, какая дата проставляется.

Sasha

Эх, а мне прогу кто-нибудь напишет :)
skype: ab.sasha

Proydoha

У меня есть заказ, но мне кажется, что он слишком трудозатратный в реализации. Сейчас я оформлю ТЗ.

Proydoha

В общем есть такая программа:

DiceRoller V2.1 (for Skype)
Исходники на SourceForge

Если её запустить, то скайп спросит можно ли ей подключиться к нему. И если ответить да, то он будет просматривать сообщения на предмет строки "//<число>d<число><всё что угодно>"

Например:"//1d20"


И если он видит, что кто-то что-то написал такое, то генерирует случайное число в указанном диапазоне. И пишет (от имени запустившего программу), что такой-то человек выбросил такое-то случайное число.

Вот так:"Proydoha rolled  1d20; result: 6"



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

Ссылки на ютуб могут выглядеть вот так:
http://www.youtube.com/watch?v=XP9pnSXhibw
http://youtu.be/XP9pnSXhibw


Наверное строку надо сперва проверять на наличие "youtube.com" или "youtu.be"
В первом случае надо в этой же строке искать подстроку, которая начинается после "v=" и заканчивается либо перед пробелом, либо перед символом "&", либо перед концом строки.
Во втором - подстроку, которая начинается после ".be/" и заканчивается либо перед пробелом, либо перед концом строки.
Если такой подстроки нету, то ничего не делать.

По этой подстроке можно найти информацию о видео.

XML с информацией о видео находится по следующему адресу, где эта подстрока стоит в самом конце:
http://gdata.youtube.com/feeds/api/videos/XP9pnSXhibw

Заголовок размещён между тегов <title type='text'></title>

Кто-то кинул ссылку на ютуб - бах, сразу же его заголовок в окно чата.

Sasha

Поизучай апи скайпа на наличие подходящих тебе функций, если ничего такого нет - тогда сложнее, нужно выкручиваться винапи.
skype: ab.sasha

Proydoha

25-08-2013, 12:25:03 #22 Последнее редактирование: 25-08-2013, 12:44:29 от Proydoha
Цитата: Sasha от 25-08-2013, 12:02:25
Поизучай апи скайпа на наличие подходящих тебе функций, если ничего такого нет - тогда сложнее, нужно выкручиваться винапи.

Первая программа его и использует. Просто мне надо поизучить С++, что б понять как.

Судя по всему мне вот сюда надо вставить все нужные проверки и вывод результата, заместо его луа-магии:
Исходник SkypeThread.cpp, строка №121

Sasha

Тогда скачай исходники и добейся их компиляции и работоспособности в студии в исходном виде, далее в файле DiceRollerLuaScript.cpp переписать функцию performCommand. Найти регулярным выражением или еще как либо искомую строку и самое пока мне неясное отправить http запрос на этот адрес и проанализировать ответ. HTTP запросы вроде штука не сложная, но никогда не сталкивался с этим в плюсах, уверен в инете материала и готовых решений хватает.
skype: ab.sasha

Proydoha

25-08-2013, 14:12:27 #24 Последнее редактирование: 25-08-2013, 14:21:02 от Proydoha
Цитата: Sasha от 25-08-2013, 13:28:09
Тогда скачай исходники и добейся их компиляции и работоспособности в студии в исходном виде, далее в файле DiceRollerLuaScript.cpp переписать функцию performCommand. Найти регулярным выражением или еще как либо искомую строку и самое пока мне неясное отправить http запрос на этот адрес и проанализировать ответ. HTTP запросы вроде штука не сложная, но никогда не сталкивался с этим в плюсах, уверен в инете материала и готовых решений хватает.

Я плюнул на этапе "скачай студию". Он подключает какую-то бороду, которая называется "Active Template Library" и в 2010-экспресс студии её нет, а не-экспресс майкрософт разрешает качать только 2012-2013, которые тянут по 12Гб. Спасиба, как-нибудь обойдусь.

Да, читать XML не сложно: http://support.microsoft.com/kb/815659/ru

Вообще слишком высокий входной порог для меня. Дебилов, наверное, отсеивает на раз. Непонятно что качать, с чего начинать, как этим пользоваться. Старое недоступно, к новому нет руководств.

Sasha

Могу еще посоветовать обратиться в винапи FindWindow(Ex) и Get(Set)WindowText, однако даже у Spy++ с этим возникают определенные проблемы, так что не факт что получится.

skype: ab.sasha

Proydoha

25-08-2013, 18:52:31 #26 Последнее редактирование: 25-08-2013, 18:59:04 от Proydoha
ха-ха

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

#include "stdafx.h"
#include <tchar.h>
#include <string>

#using <mscorlib.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::Xml;
using namespace std;

String ^getTitle(String ^url)
{
bool pickup = false;
String ^title = "Error";

XmlTextReader ^reader = gcnew XmlTextReader (url);
while (reader->Read())
    {
        switch (reader->NodeType)
        {
case XmlNodeType::Element:
if (reader->Name == "title") {pickup = true;}
break;
case XmlNodeType::Text:
if (pickup == true) {title = reader->Value;}
break;
case XmlNodeType::EndElement:
break;
}
if (title != "Error") {break;}
}
return title;
}

void main(void)
{
Console::WriteLine(getTitle("http://gdata.youtube.com/feeds/api/videos/XP9pnSXhibw"));
Console::ReadLine();
}


Говорю ему:
-Субстр! Покажи что получилось!
-Ничего не получилось, маста.

Строки обрабатывать сложнее, чем читать XML : /

/*
//string youtubeURL = "tthsgtgrhrty456erret";
string youtubeURL = "http://www.youtube.com/watch?v=KVN_0qvuhhw&fghfgfh";
//string youtubeURL = "gggdgddf ss sgg http://youtu.be/KVN_0qvuhhw gfgsdg";

size_t size = youtubeURL.size();

if (youtubeURL.find("youtube.com/",0) < size)
{
size_t start = youtubeURL.find("v=");
Console::WriteLine("Case 1");
//Console::WriteLine(start);
size_t end = youtubeURL.find("&",start);
if (end > size)
{
end = youtubeURL.find(" ",start);
if (end > size)
{
end = size;
}
}
string videodata;
videodata = youtubeURL.substr(5,5);

Console::WriteLine(videodata);
}
else if (youtubeURL.find("youtu.be/",0) < size)
{
Console::WriteLine("Case 2");
}
else
{
Console::WriteLine("Case 3");
}
*/

Sasha

Перебрал при помощи винапи все что мог, кроме заголовка самого окна скайпа ниче не редактируется. Быстро тут я не разберусь, к сожалению не моя специализация.
skype: ab.sasha

Proydoha

Цитата: Sasha от 26-08-2013, 01:16:36
Перебрал при помощи винапи все что мог, кроме заголовка самого окна скайпа ниче не редактируется. Быстро тут я не разберусь, к сожалению не моя специализация.

Научи меня редактировать строки : )

Я ввожу в гугл запрос и он показывает мне восемь миллионов вариантов как вырезать подстроку из строки.

Sasha

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

Давай лучше конкретную задачу и я подумаю как лучше сделать.
skype: ab.sasha