Re: Помощь в создании подкастов
Posted: Mon Oct 22, 2012 11:30 pm
И еще вопрос можно ли в скрипте проверить автоматом правильно создалась ли ссылка, т.е. если такой файл на сервере?
Решения пользователей программы "Домашний медиа-сервер (UPnP, DLNA, HTTP)"
https://www.homemediaserver.ru/forum/
Это С++ скрипт, но переделать под Pascal или JacaScript, думаю, не составит труда:linkey wrote:Подскажите, как в скрипте запустить файл с диска?
Code: Select all
{
Variant objShell, objStdOut, objWshScriptExec; char strOutput;
try {objShell = CreateOleObject('WScript.Shell');} except {}
if (VarType(objShell)!=varDispatch) {
HmsLogMessage(1, 'Не могу создать ActiveXObject WScript.Shell');
return;
}
objShell.Run('Calc.exe');
objWshScriptExec = objShell.Exec("ipconfig");
objStdOut = objWshScriptExec.StdOut;
strOutput = objStdOut.ReadAll();
strOutput = ReplaceStr(strOutput, '\n', '<br>');
strOutput = HmsHtmlToText(strOutput, 866);
ShowMessage(strOutput);
}
Влёгкую. Особенно у тех, кто запускает HMS в режиме сервиса. Поэтому люди - не качайте скриптов где попало. )slawa321 wrote:а вот ехе -думаю это уже можно вируса делать
Можно, какие проблемы? заголовок всего, до чего рука дотянется. )linkey wrote:можно ли изменить заголовок медиаресурса, в скрипте получения ссылки.
Вот этого незнаю.. Действительно, подкаст youtube Евгения формирует несколько ссылок, при выборе проигрывания фильма, разного доступного качества. Но как влияет эта галочка на это, не разбирался.linkey wrote:Кто нибудь пробовал пользоваться "скрипт формирует несколько ссылок". Объясните плиз на простом примере как это сделать. Подкаст ютуб просмотрел, скачал даже пару подкастов с буржуйского wms, но так что то и не понял.
Эээ.. супер универсального ответа, наверно нет, потому как наличие файла и его доступность иногда трудно проверить, пока его действительно не начнёшь "качать". Потому как часто ссылки на файлы, на самом деле ссылки на скрипты с передачей параметров, а те уже могут начать отдачу потока или перенаправить... Но как вариант, можно сделать запрос, методом HEAD, и посмотреть заголовки в ответах. Где-то у меня функия раньше валялась, я использовал, для получения redirect ссылки. Примерно так:linkey wrote:можно ли в скрипте проверить автоматом правильно создалась ли ссылка, т.е. если такой файл на сервере?
Code: Select all
Variant xmlHttp=null; char sLocation='', s; int nTimeOut, TimeStart;
try {xmlHttp = CreateOleObject('WinHttp.WinHttpRequest.5.1');} except {}
if (VarType(xmlHttp)!=varDispatch) {HmsLogMessage(1, 'Невозможно создать ActiveXObject WinHttp.WinHttpRequest.5.1'); return '';}
xmlHttp.Open('HEAD', sLink, true);
xmlHttp.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0');
xmlHttp.SetRequestHeader('Referer', gsUrlBase);
xmlHttp.Send();
xmlHttp.WaitForResponse();
sLocation=xmlHttp.GetResponseHeader('Location');
s=xmlHttp.GetAllResponseHeaders();
Code: Select all
char sHeader='', sCookie='', sContentLenght='';
HmsSendRequestEx('login.rutracker.org', '/forum/login.php', 'HEAD',
'application/x-www-form-urlencoded', sReferer,
'login_username='+mpPodcastAuthorizationUserName +
'&login_password='+mpPodcastAuthorizationPassword+'&login=%C2%F5%EE%E4',
80, INTERNET_FLAG_NO_AUTO_REDIRECT + INTERNET_FLAG_NO_COOKIES, sHeader);
HmsRegExMatch('Set-Cookie: (.*?);', sHeader, sCookie, 1, PCRE_SINGLELINE));
HmsRegExMatch(Content-Lenght: (.*)\n', sHeader, sContentLenght, 1, PCRE_SINGLELINE));
Спасибо попробуюWendyH wrote: ...
Code: Select all
// -----------------------------------------------------------------------------
// Расшифровка закодированного текста плеера uppod
char DecodeUppodText(char sData) {
variant char1, char2; int i;
variant Client_codec_a = ["G", "d", "R", "0", "M", "Y", "4", "v", "6", "u", "t", "i", "f", "c", "s", "l", "B", "5", "n", "2", "V", "Z", "J", "m", "L", "="];
variant Client_codec_b = ["1", "w", "Q", "o", "9", "U", "a", "N", "x", "D", "X", "7", "z", "H", "y", "3", "e", "g", "T", "W", "b", "8", "k", "I", "p", "r"];
sData = ReplaceStr(sData, "\n", "");
for (i=0; i<Length(Client_codec_a); i++) {
char1 = Client_codec_b[i];
char2 = Client_codec_a[i];
sData = ReplaceStr(sData, char1, "___");
sData = ReplaceStr(sData, char2, char1);
sData = ReplaceStr(sData, "___", char2);
}
sData = HmsUtf8Decode(HmsBase64Decode(sData));
return sData;
}
Я вот попробовал, но с ходу тоже не смог разобраться с HmsMediaInfoCreate и HmsMediaInfoGet... Ничего не получилось. Можно у Евгения поинтересоваться, если сильно нужно.PavelN65 wrote:Вопрос, а можно ли в скрипте получить информацию о файле, такую как в MediaInfo или как при выполнении команды "Загрузить свойства файла"?
Code: Select all
// -----------------------------------------------------------------------------
// Расшифровка закодированного текста плеера uppod
char DecodeUppodText2(char sData) {
variant char1, char2, hash, tab_a, tab_b; int i;
hash = "0123456789WGXMHRUZID=NQVBLihbzaclmepsJxdftioYkngryTwuvihv7ec41D6GpBtXx3QJRiN5WwMf=ihngU08IuldVHosTmZz9kYL2bayE";
// Проверяем, может не нужно раскодировать (json или ссылка)
if ((Pos("{", sData)>0) || (LeftCopy(sData, 4)=="http")) return HmsUtf8Decode(sData);
sData = DecodeUppod_tr(sData, "r", "A");
hash = ReplaceStr(hash, 'ih', '\n');
if (RightCopy(sData, 1)=='!') {
sData = LeftCopy(sData, Length(sData)-1);
tab_a = ExtractWord(4, hash, '\n');
tab_b = ExtractWord(3, hash, '\n');
} else {
tab_a = ExtractWord(2, hash, '\n');
tab_b = ExtractWord(1, hash, '\n');
}
sData = ReplaceStr(sData, "\n", "");
for (i=1; i<=Length(tab_a); i++) {
char1 = Copy(tab_b, i, 1);
char2 = Copy(tab_a, i, 1);
sData = ReplaceStr(sData, char1, "___");
sData = ReplaceStr(sData, char2, char1);
sData = ReplaceStr(sData, "___", char2);
}
sData = HmsUtf8Decode(HmsBase64Decode(sData));
sData = ReplaceStr(sData, "hthp:", "http:");
return sData;
}
string DecodeUppod_tr(string sData, string ch1, string ch2) {
string s = ""; int i, loc3, nLen;
if ((Copy(sData, Length(sData)-1, 1)==ch1) && (Copy(sData, 3, 1)==ch2)) {
nLen = Length(sData);
for (i=nLen; i>0; i--) s += Copy(sData, i, 1);
loc3 = Int(StrToIntDef(Copy(s, nLen-1, 2), 0)/2);
s = Copy(s, 3, nLen-5); i = loc3;
if (loc3 < Length(s)) {
while (i < Length(s)) {
s = LeftCopy(s, i) + Copy(s, i+2, 99999);
i+= loc3;
}
}
sData = s + "!";
}
return sData;
}
Code: Select all
<html><body><script type="text/javascript"> (function(){
window.u62=function(a,b,c){return a.replace(c,b);};
try
{
eval(unescape("var%20x%3D%271f%28%22%5C%5C%5C%5CC%5C%
.............................................................
return;
}
catch(err){}
})();</script></body></html>
Нука-нука, интересно!linkey wrote:...попытался расшифровать но не смог!
В общем, многочасовой детектив по раскодированию их суперстарательно зашифрованного ответа был завершен, но удовлетворение было получено только от действа, чем от результата.. Ибо изначально я знал, что ветвь развития этого направления ведёт под откос.. Я вот про что. Чтобы яваскриптовые функции использовать, возвращяемые от сайта, нужно делать Eval. А делать Eval содержимого от чужого сайта - эта прямая дорожка к тому чтобы скатиться... Ну, в общем, нельзя. НЕЛЬЗЯ. Конечно можно. Но нельзя. Это плохой тон. Очень. Можно конечно замарочится и сделать свой парсер, который Eval делает не напрямую тупо. Такие есть, но это сложно.linkey wrote:Попал на сайт который дает ссылки на многие ресурсы. Хотел сам осилить, но не смог. Не знаю то ли маловато знаний то ли времени. Вообщем прошу помощи!