![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
	 | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Здравствуйте! 
		
	
		
		
		
		
		
	
		
		
	
	
	делаю запрос аудиозаписей, ответ приходит. Но как его разобрать и какой компонент лучше использовать, для выведения в программе? Основной вопрос по тексту.. Я пробовал мудрить с функциями pos, delete,copy и тд.. но только запутал себя еще больше..   Ответ такой(запрос для примера 3 трека) Цитата: 
	
  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Название трека идет после слова "title":"Имя артиста и название трека." 
		
	
		
		
		
		
		
	
		
		
	
	
	Можете с помощью цикла пробежаться по этому тексту и начинать считывать название трека именно после ' "title":" ' и признак конца будет символ "  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Нужно по-правилам пользовать регэкспы, но мона и так разобрать, G-кодом 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Код: 
	procedure TForm1.Button1Click(Sender: TObject);
 procedure prs(ds, s1, s2: string; list: TStrings);
 var
  pScan, pEnd, ps1, ps2: PChar;
  foundText : string;
 begin
  ds := Uppercase(ds); s1:= Uppercase(s1); s2:= Uppercase(s2);
  ps1:= PChar(s1); ps2:= PChar(s2); pScan:= PChar(ds);
  repeat pScan := StrPos(pScan, ps1);
   if pScan <> nil then
    begin
     inc(pScan, Length(s1)); pEnd:= StrPos(pScan, ps2);
     if pEnd <> nil then
      begin
       SetString(foundText, Pchar(ds)+(pScan-PChar(ds)), pEnd-pScan);
       list.Add(foundText); pScan:= pEnd+Length(s2);
      end else pScan:= nil;
    end;
   until pScan = nil;
 end;
var
 artist, title, url: TStrings;
 i: integer;
 s: string;
begin
 artist:= TStringList.Create;
 title:= TStringList.Create;
 url:= TStringList.Create;
 s:= Memo1.Text;
 prs(s, '"artist":"', '","', artist);
 prs(s, '"title":"', '","', title);
 prs(s, '"url":"', '","', url);
 ListBox1.TabWidth := 200;
 for i := 0 to artist.Count-1 do
  ListBox1.Items.Add('Artist: '+artist[i]+^I+'Title: '+title[i]+^I+'URL: '+url[i]);
 artist.Free;
 title.Free;
 url.Free;
end; | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
Gareth (10.04.2016)
  | ||
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	procedure test;
Var
  Str, st, MyStr: String;
  i,j: Integer;
begin
 while (Pos(artist, dintext)<>0) Do
 begin
  ar:=''; tit:=''; dr:='';
  i:=Pos(artist, dintext);
  j:=i+length(artist);
  Repeat
   ar:=ar+dintext[j];
   inc(j);
  until ((dintext[j]='"'));
  Delete(dintext, i, j-i);
  i:=Pos(title, dintext);
  j:=i+length(title);
  Repeat
   tit:=tit+dintext[j];
   inc(j);
  until (dintext[j]='"');
  Delete(dintext, i, j-i);
  i:=Pos(dur, dintext);
  j:=i+length(dur);
  Repeat
   dr:=dr+dintext[j];
   inc(j);
  until (dintext[j]=',');
  Delete(dintext, i, j-i);
  Form1.ListBox1.Items.Add(ar+'-'+tit+','+dr);
  {Form1.ListBox1.Items.Add('Track:'+ar);
  Form1.ListBox1.Items.Add('Title:'+tit);
  Form1.ListBox1.Items.Add('Duration:'+dr);  }
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 dintext:= Memo1.Text;
 artist:='"artist":"';
 title:='"title":"';
 dur:='"duration":';
 test;
end; | 
| Этот пользователь сказал Спасибо js roman1 за это полезное сообщение: | ||
 
Gareth (10.04.2016)
  | ||
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Спасибо огромное за код! 
		
	
		
		
		
		
		
	
		
		
	
	
	Работает. Но как воспроизвести трек по нажатию в листбоксе? Нашёл в инете код: Код: 
	procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
                  Shift: TShiftState; X, Y: Integer);
                  var i: integer;
                begin
                if ListBox1.ItemIndex>=0 then
                begin
                i:= ListBox1.ItemIndex;
                BasicPlay(link[i]);
                end;
                 
                end;Что это за link, где и как его объявить ?  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Ага, на BasicPlay значит не ругается, предположим, что link это список с текстовыми адресами, если мой пример работает, тогда замените эту строчку на BasicPlay(url[ListBox1.ItemIndex]);  i можно и выкинуть, только url.Free следует выполнить лишь при выходе из программы, не раньше 
		
	
		
		
		
		
			
		
		
		
		
		
			З.Ы. В смысле, нужно стринГлисту url сделать глобальной, видимой из других процедур перенеся её в var-секцию юнита Последний раз редактировалось Alegun, 10.04.2016 в 13:45.  | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
Gareth (10.04.2016)
  | ||
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Сделал как вы сказали. Все ссылки, артисты и тд отоброжаются, ваш код работает. Но при попытки воспроизвести музыку выдает ошибку. 
		
	
		
		
		
		
		
	
		
		
	
	
	Ошибка с этого кода, 7 строка: Код: 
	var channel: HStream; procedure BasicPlay(FileName: AnsiString); begin Channel:= BASS_StreamCreateURL(PAnsiChar(FileName),0,0,nil,0); //Создаём файл, функция аналогична предыдущей, так что без комментариев. if not Bass_ChannelPlay(Channel, False) then //Воспроизводим MessageBox(0, 'Ошибка воспроизведения файла',0, Mb_ok); end; ![]()  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Код: 
	uses ..., superobject
....
var
Answer: ISuperObject
...
  Answer:= TSuperObject.ParseStream(myHT.Document,False);
     msg:=Answer.AsObject.S['title'];
     | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Извиняюсь что долго не отвечал. 
		
	
		
		
		
		
		
	
		
		
	
	
	Плеер работает так как мне надо= ))) Спасибо всем, особенно Alegun   .Дело было в том, что удалял я не те символы с ссылки. Надо было другие слэши уждалять. С двумя слэшами как в ответе от вк "\/" не играло, я удалял этот слэш "/", а надо было этот "\" , + какого-то фига ответ был в верхнем регистре, перевел ответ на всякий случай в нижний. Плеер работает, осталось прикрутить потоки и всякие кнопочки, типа плей, пауза, стоп... В общем разобрался я как это всё работает. Теперь не составляет труда сделать с нуля=) Еще раз спасибо всем !) Тема закрыта =)  |