Popular Post thoga31 Posted February 2, 2014 at 09:06 PM Popular Post Report #543575 Posted February 2, 2014 at 09:06 PM Titulo do Projecto: PROGRAMAR Downloader for Linux Última Versão Estável: 2.1.1 Licença: GNU GPL 3.0 Líder do Projecto: thoga31 Membros Actuais do Projecto: thoga31 Demo do Modo Interactivo (2.0.0): vídeo Demo das novidades da versão 2.1.0: vídeo Descrição do Projecto: Reparei que já temos mais do que uma aplicação relacionada com a Revista PROGRAMAR, mas nenhuma delas se destina a outra plataforma que não o Windows. Nessa medida, decidi fazer uma aplicação simples e minimalista para distribuições GNU/Linux. O programa permite: Verificar qual é a última edição da Revista. Fazer o download de todas as edições, apenas da última, ou então um download selectivo de determinadas edições. Modular o output através dos modificadores -v (verbose) e -q (quiet, não recomendado). Trabalhar em Modo Interactivo com opção de download. Obter informações acerca de uma dada edição com o Modo Informativo. Exemplos de uso: COMANDO DESCRIÇÃO revista --last Mostra qual é a última edição. revista --download last Faz o download da última edição. --get e --download são equivalentes. revista --get all Faz o download de todas as edições. revista --get range 20 27 -v Faz o download da 20ª edição até à 27ª, inclusive. revista --get set 5 10 13 36 47 Faz o download selectivo das 5ª, 10ª, 13ª e 36ª edições. Não fará a da 47ª pois neste momento, só há a 43ª O programa descarta automaticamente edições não válidas. revista --interact Entra no Modo Interactivo (ver screenshots). revista --info last Informações acerca da última edição (Modo Informativo). revista --info 34 Informações da 34ª edição. revista --help Ajuda do programa. revista --about Acerca do programa. Dirijam-se, na shell, para o directório onde querem guardar as edições e executem o programa. Ele detecta automaticamente a localização onde estão, e lá guardará os downloads. Caso algum ficheiro já exista, o seu download não é executado, mas isto não interrompe o programa - ele continua a executar os restantes downloads que estão na stack de espera. Caso um download tenha menos de 1KB, o ficheiro resultante é eliminado. Nos meus tempos livres irei desenvolver mais a aplicação. Acerca do programa: Programado em Object Pascal. Compilado com Free Pascal Compiler versão 2.6.4, no Ubuntu 14.04 LTS x64. Download: Bitbucket Centro de Downloads:http://www.portugal-a-programar.pt/files/file/95-programar-downloader-for-linux/ 5 Report Knowledge is free!
Kline777 Posted February 2, 2014 at 10:14 PM Report #543591 Posted February 2, 2014 at 10:14 PM Já alguém fez para android? 😛 1 Report
thoga31 Posted February 2, 2014 at 10:14 PM Author Report #543592 Posted February 2, 2014 at 10:14 PM Estás convidado a fazê-lo com Delphi 😄😉 Knowledge is free!
Kline777 Posted February 2, 2014 at 10:31 PM Report #543595 Posted February 2, 2014 at 10:31 PM Convidado=desafiado ^^ amanhã vou ver se trato disso 😉 1 Report
thoga31 Posted February 2, 2014 at 10:33 PM Author Report #543596 Posted February 2, 2014 at 10:33 PM De facto seria fixe termos ferramentas destas para as várias plataformas. Para Windows temos umas três, se não me engano. Para Linux temos esta. Falta Mac, iOS, Android... Força nisso, bom trabalho 👍 Knowledge is free!
Kline777 Posted February 2, 2014 at 10:38 PM Report #543597 Posted February 2, 2014 at 10:38 PM Para saberes que edições existem existe algum webservice ou assim ou vais directo pelo link existir/nao existir?
thoga31 Posted February 2, 2014 at 11:36 PM Author Report #543608 Posted February 2, 2014 at 11:36 PM (edited) Acho que existe uma página XML com essa informação, mas eu não usei isso e não é uma página "oficial", é mantida pelo @ribeiro55, salvo erro. Se fores a uma página que não existe, ela vai sempre existir - se vais a uma edição que não existe, páras na Home Page e apanhas o código dela. 😛 Eu usei a informação da página de Edições, a linha 163 (salvo erro, e neste momento) tem uma lista enorme com todas as edições. Eu identifico-a, faço um breve parse dela e extraio a última edição. Claro que não vou à linha 163 directamente, se amanhã aquilo muda deixa de ser válido. Identifiquei algo naquela linha que nunca se repete em mais nenhuma, e esse é o meu identificador 😉 Edited February 2, 2014 at 11:36 PM by thoga31 Knowledge is free!
nunopicado Posted February 3, 2014 at 01:43 AM Report #543616 Posted February 3, 2014 at 01:43 AM De facto seria fixe termos ferramentas destas para as várias plataformas. Para Windows temos umas três, se não me engano. Para Linux temos esta. Falta Mac, iOS, Android... Força nisso, bom trabalho 👍 Se o Kline fizer para Android, de uma assentada faz também para Mac, iOS e Windows. 😄 Way to go Delphi. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
ribeiro55 Posted February 3, 2014 at 08:35 AM Report #543623 Posted February 3, 2014 at 08:35 AM (edited) Acho que existe uma página XML com essa informação, mas eu não usei isso e não é uma página "oficial", é mantida pelo @ribeiro55, salvo erro. True. Hei-de continuar a manter até que fique sem teclado 😛 Podes usar e abusar, está lá para isso. http://programar.sergioribeiro.com/programar.xml EDIT: E para veres a versão sem estar a sacar a coisa toda: http://programar.sergioribeiro.com/ver.xml Edited February 3, 2014 at 08:42 AM by ribeiro55 1 Report Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
nunopicado Posted February 3, 2014 at 08:57 AM Report #543624 Posted February 3, 2014 at 08:57 AM Para quem precisar, fica a unit em Delphi com a serialização do XML: {**************************************************} { } { XML Data Binding } { } { Generated on: 03-02-2014 08:57:18 } { Generated from: E:\Dropbox\programar.xml } { } {**************************************************} unit programar; interface uses xmldom, XMLDoc, XMLIntf; type { Forward Decls } IXMLProgramarType = interface; IXMLInfoType = interface; IXMLEdicoesType = interface; IXMLEdicaoType = interface; IXMLImagensType = interface; IXMLCapasType = interface; IXMLCapaType = interface; IXMLPaginasType = interface; IXMLArtigosType = interface; IXMLCategoriaType = interface; IXMLArtigoType = interface; IXMLEquipaType = interface; IXMLEquipaType2 = interface; { IXMLProgramarType } IXMLProgramarType = interface(IXMLNode) ['{78328FC5-2C17-4AAC-B4F2-5D266648935C}'] { Property Accessors } function Get_Info: IXMLInfoType; function Get_Edicoes: IXMLEdicoesType; { Methods & Properties } property Info: IXMLInfoType read Get_Info; property Edicoes: IXMLEdicoesType read Get_Edicoes; end; { IXMLInfoType } IXMLInfoType = interface(IXMLNode) ['{B77B4BEE-DE9B-418E-AD17-4606E7762CB7}'] { Property Accessors } function Get_Versao: Integer; function Get_Totaledicoes: Integer; function Get_Ultimaedicao: UnicodeString; function Get_Url: UnicodeString; procedure Set_Versao(Value: Integer); procedure Set_Totaledicoes(Value: Integer); procedure Set_Ultimaedicao(Value: UnicodeString); procedure Set_Url(Value: UnicodeString); { Methods & Properties } property Versao: Integer read Get_Versao write Set_Versao; property Totaledicoes: Integer read Get_Totaledicoes write Set_Totaledicoes; property Ultimaedicao: UnicodeString read Get_Ultimaedicao write Set_Ultimaedicao; property Url: UnicodeString read Get_Url write Set_Url; end; { IXMLEdicoesType } IXMLEdicoesType = interface(IXMLNodeCollection) ['{27E19337-20E4-4B5B-8C81-2043FDAF8105}'] { Property Accessors } function Get_Edicao(Index: Integer): IXMLEdicaoType; { Methods & Properties } function Add: IXMLEdicaoType; function Insert(const Index: Integer): IXMLEdicaoType; property Edicao[index: Integer]: IXMLEdicaoType read Get_Edicao; default; end; { IXMLEdicaoType } IXMLEdicaoType = interface(IXMLNode) ['{EBA6BE97-5780-4812-BE74-CBF6E7B1C92E}'] { Property Accessors } function Get_Num: Integer; function Get_Data: UnicodeString; function Get_Imagens: IXMLImagensType; function Get_Artigos: IXMLArtigosType; function Get_Equipa: IXMLEquipaType; function Get_Pdf: UnicodeString; procedure Set_Num(Value: Integer); procedure Set_Data(Value: UnicodeString); procedure Set_Pdf(Value: UnicodeString); { Methods & Properties } property Num: Integer read Get_Num write Set_Num; property Data: UnicodeString read Get_Data write Set_Data; property Imagens: IXMLImagensType read Get_Imagens; property Artigos: IXMLArtigosType read Get_Artigos; property Equipa: IXMLEquipaType read Get_Equipa; property Pdf: UnicodeString read Get_Pdf write Set_Pdf; end; { IXMLImagensType } IXMLImagensType = interface(IXMLNode) ['{B9CB5C23-BFD6-4F7A-B49F-F65F30A8F8F1}'] { Property Accessors } function Get_Capas: IXMLCapasType; function Get_Paginas: IXMLPaginasType; { Methods & Properties } property Capas: IXMLCapasType read Get_Capas; property Paginas: IXMLPaginasType read Get_Paginas; end; { IXMLCapasType } IXMLCapasType = interface(IXMLNodeCollection) ['{C9CFA690-A6FE-4126-AB9A-9A7AF185B67D}'] { Property Accessors } function Get_Capa(Index: Integer): IXMLCapaType; { Methods & Properties } function Add: IXMLCapaType; function Insert(const Index: Integer): IXMLCapaType; property Capa[index: Integer]: IXMLCapaType read Get_Capa; default; end; { IXMLCapaType } IXMLCapaType = interface(IXMLNode) ['{8E954675-4AEC-4808-94AC-F9705C3BE342}'] { Property Accessors } function Get_Tamanho: UnicodeString; procedure Set_Tamanho(Value: UnicodeString); { Methods & Properties } property Tamanho: UnicodeString read Get_Tamanho write Set_Tamanho; end; { IXMLPaginasType } IXMLPaginasType = interface(IXMLNodeCollection) ['{091BBC55-567B-48F6-B60C-A7E8380D87A4}'] { Property Accessors } function Get_Pagina(Index: Integer): UnicodeString; { Methods & Properties } function Add(const Pagina: UnicodeString): IXMLNode; function Insert(const Index: Integer; const Pagina: UnicodeString): IXMLNode; property Pagina[index: Integer]: UnicodeString read Get_Pagina; default; end; { IXMLArtigosType } IXMLArtigosType = interface(IXMLNodeCollection) ['{7A1A0A29-A88B-48F3-B00E-4891CB7B14FF}'] { Property Accessors } function Get_Categoria(Index: Integer): IXMLCategoriaType; { Methods & Properties } function Add: IXMLCategoriaType; function Insert(const Index: Integer): IXMLCategoriaType; property Categoria[index: Integer]: IXMLCategoriaType read Get_Categoria; default; end; { IXMLCategoriaType } IXMLCategoriaType = interface(IXMLNodeCollection) ['{3D384351-5284-4C9D-9D5F-D58927437396}'] { Property Accessors } function Get_Designacao: UnicodeString; function Get_Artigo(Index: Integer): IXMLArtigoType; procedure Set_Designacao(Value: UnicodeString); { Methods & Properties } function Add: IXMLArtigoType; function Insert(const Index: Integer): IXMLArtigoType; property Designacao: UnicodeString read Get_Designacao write Set_Designacao; property Artigo[index: Integer]: IXMLArtigoType read Get_Artigo; default; end; { IXMLArtigoType } IXMLArtigoType = interface(IXMLNode) ['{70410B8A-F377-4790-A80D-6CB1B4BCAB39}'] { Property Accessors } function Get_Titulo: UnicodeString; procedure Set_Titulo(Value: UnicodeString); { Methods & Properties } property Titulo: UnicodeString read Get_Titulo write Set_Titulo; end; { IXMLEquipaType } IXMLEquipaType = interface(IXMLNodeCollection) ['{C94EC3B3-CFA5-47D4-A762-904B06B846DB}'] { Property Accessors } function Get_Membro(Index: Integer): UnicodeString; { Methods & Properties } function Add(const Membro: UnicodeString): IXMLNode; function Insert(const Index: Integer; const Membro: UnicodeString): IXMLNode; property Membro[index: Integer]: UnicodeString read Get_Membro; default; end; { IXMLEquipaType2 } IXMLEquipaType2 = interface(IXMLNode) ['{561D7237-367B-405A-8640-4087EA7E6DBB}'] end; { Forward Decls } TXMLProgramarType = class; TXMLInfoType = class; TXMLEdicoesType = class; TXMLEdicaoType = class; TXMLImagensType = class; TXMLCapasType = class; TXMLCapaType = class; TXMLPaginasType = class; TXMLArtigosType = class; TXMLCategoriaType = class; TXMLArtigoType = class; TXMLEquipaType = class; TXMLEquipaType2 = class; { TXMLProgramarType } TXMLProgramarType = class(TXMLNode, IXMLProgramarType) protected { IXMLProgramarType } function Get_Info: IXMLInfoType; function Get_Edicoes: IXMLEdicoesType; public procedure AfterConstruction; override; end; { TXMLInfoType } TXMLInfoType = class(TXMLNode, IXMLInfoType) protected { IXMLInfoType } function Get_Versao: Integer; function Get_Totaledicoes: Integer; function Get_Ultimaedicao: UnicodeString; function Get_Url: UnicodeString; procedure Set_Versao(Value: Integer); procedure Set_Totaledicoes(Value: Integer); procedure Set_Ultimaedicao(Value: UnicodeString); procedure Set_Url(Value: UnicodeString); end; { TXMLEdicoesType } TXMLEdicoesType = class(TXMLNodeCollection, IXMLEdicoesType) protected { IXMLEdicoesType } function Get_Edicao(Index: Integer): IXMLEdicaoType; function Add: IXMLEdicaoType; function Insert(const Index: Integer): IXMLEdicaoType; public procedure AfterConstruction; override; end; { TXMLEdicaoType } TXMLEdicaoType = class(TXMLNode, IXMLEdicaoType) protected { IXMLEdicaoType } function Get_Num: Integer; function Get_Data: UnicodeString; function Get_Imagens: IXMLImagensType; function Get_Artigos: IXMLArtigosType; function Get_Equipa: IXMLEquipaType; function Get_Pdf: UnicodeString; procedure Set_Num(Value: Integer); procedure Set_Data(Value: UnicodeString); procedure Set_Pdf(Value: UnicodeString); public procedure AfterConstruction; override; end; { TXMLImagensType } TXMLImagensType = class(TXMLNode, IXMLImagensType) protected { IXMLImagensType } function Get_Capas: IXMLCapasType; function Get_Paginas: IXMLPaginasType; public procedure AfterConstruction; override; end; { TXMLCapasType } TXMLCapasType = class(TXMLNodeCollection, IXMLCapasType) protected { IXMLCapasType } function Get_Capa(Index: Integer): IXMLCapaType; function Add: IXMLCapaType; function Insert(const Index: Integer): IXMLCapaType; public procedure AfterConstruction; override; end; { TXMLCapaType } TXMLCapaType = class(TXMLNode, IXMLCapaType) protected { IXMLCapaType } function Get_Tamanho: UnicodeString; procedure Set_Tamanho(Value: UnicodeString); end; { TXMLPaginasType } TXMLPaginasType = class(TXMLNodeCollection, IXMLPaginasType) protected { IXMLPaginasType } function Get_Pagina(Index: Integer): UnicodeString; function Add(const Pagina: UnicodeString): IXMLNode; function Insert(const Index: Integer; const Pagina: UnicodeString): IXMLNode; public procedure AfterConstruction; override; end; { TXMLArtigosType } TXMLArtigosType = class(TXMLNodeCollection, IXMLArtigosType) protected { IXMLArtigosType } function Get_Categoria(Index: Integer): IXMLCategoriaType; function Add: IXMLCategoriaType; function Insert(const Index: Integer): IXMLCategoriaType; public procedure AfterConstruction; override; end; { TXMLCategoriaType } TXMLCategoriaType = class(TXMLNodeCollection, IXMLCategoriaType) protected { IXMLCategoriaType } function Get_Designacao: UnicodeString; function Get_Artigo(Index: Integer): IXMLArtigoType; procedure Set_Designacao(Value: UnicodeString); function Add: IXMLArtigoType; function Insert(const Index: Integer): IXMLArtigoType; public procedure AfterConstruction; override; end; { TXMLArtigoType } TXMLArtigoType = class(TXMLNode, IXMLArtigoType) protected { IXMLArtigoType } function Get_Titulo: UnicodeString; procedure Set_Titulo(Value: UnicodeString); end; { TXMLEquipaType } TXMLEquipaType = class(TXMLNodeCollection, IXMLEquipaType) protected { IXMLEquipaType } function Get_Membro(Index: Integer): UnicodeString; function Add(const Membro: UnicodeString): IXMLNode; function Insert(const Index: Integer; const Membro: UnicodeString): IXMLNode; public procedure AfterConstruction; override; end; { TXMLEquipaType2 } TXMLEquipaType2 = class(TXMLNode, IXMLEquipaType2) protected { IXMLEquipaType2 } end; { Global Functions } function Getprogramar(Doc: IXMLDocument): IXMLProgramarType; function Loadprogramar(const FileName: string): IXMLProgramarType; function Newprogramar: IXMLProgramarType; const TargetNamespace = ''; implementation { Global Functions } function Getprogramar(Doc: IXMLDocument): IXMLProgramarType; begin Result := Doc.GetDocBinding('programar', TXMLProgramarType, TargetNamespace) as IXMLProgramarType; end; function Loadprogramar(const FileName: string): IXMLProgramarType; begin Result := LoadXMLDocument(FileName).GetDocBinding('programar', TXMLProgramarType, TargetNamespace) as IXMLProgramarType; end; function Newprogramar: IXMLProgramarType; begin Result := NewXMLdocument.GetDocBinding('programar', TXMLProgramarType, TargetNamespace) as IXMLProgramarType; end; { TXMLProgramarType } procedure TXMLProgramarType.AfterConstruction; begin RegisterChildNode('info', TXMLInfoType); RegisterChildNode('edicoes', TXMLEdicoesType); inherited; end; function TXMLProgramarType.Get_Info: IXMLInfoType; begin Result := ChildNodes['info'] as IXMLInfoType; end; function TXMLProgramarType.Get_Edicoes: IXMLEdicoesType; begin Result := ChildNodes['edicoes'] as IXMLEdicoesType; end; { TXMLInfoType } function TXMLInfoType.Get_Versao: Integer; begin Result := ChildNodes['versao'].NodeValue; end; procedure TXMLInfoType.Set_Versao(Value: Integer); begin ChildNodes['versao'].NodeValue := Value; end; function TXMLInfoType.Get_Totaledicoes: Integer; begin Result := ChildNodes['totaledicoes'].NodeValue; end; procedure TXMLInfoType.Set_Totaledicoes(Value: Integer); begin ChildNodes['totaledicoes'].NodeValue := Value; end; function TXMLInfoType.Get_Ultimaedicao: UnicodeString; begin Result := ChildNodes['ultimaedicao'].Text; end; procedure TXMLInfoType.Set_Ultimaedicao(Value: UnicodeString); begin ChildNodes['ultimaedicao'].NodeValue := Value; end; function TXMLInfoType.Get_Url: UnicodeString; begin Result := ChildNodes['url'].Text; end; procedure TXMLInfoType.Set_Url(Value: UnicodeString); begin ChildNodes['url'].NodeValue := Value; end; { TXMLEdicoesType } procedure TXMLEdicoesType.AfterConstruction; begin RegisterChildNode('edicao', TXMLEdicaoType); ItemTag := 'edicao'; ItemInterface := IXMLEdicaoType; inherited; end; function TXMLEdicoesType.Get_Edicao(Index: Integer): IXMLEdicaoType; begin Result := List[index] as IXMLEdicaoType; end; function TXMLEdicoesType.Add: IXMLEdicaoType; begin Result := AddItem(-1) as IXMLEdicaoType; end; function TXMLEdicoesType.Insert(const Index: Integer): IXMLEdicaoType; begin Result := AddItem(Index) as IXMLEdicaoType; end; { TXMLEdicaoType } procedure TXMLEdicaoType.AfterConstruction; begin RegisterChildNode('imagens', TXMLImagensType); RegisterChildNode('artigos', TXMLArtigosType); RegisterChildNode('equipa', TXMLEquipaType); inherited; end; function TXMLEdicaoType.Get_Num: Integer; begin Result := AttributeNodes['num'].NodeValue; end; procedure TXMLEdicaoType.Set_Num(Value: Integer); begin SetAttribute('num', Value); end; function TXMLEdicaoType.Get_Data: UnicodeString; begin Result := AttributeNodes['data'].Text; end; procedure TXMLEdicaoType.Set_Data(Value: UnicodeString); begin SetAttribute('data', Value); end; function TXMLEdicaoType.Get_Imagens: IXMLImagensType; begin Result := ChildNodes['imagens'] as IXMLImagensType; end; function TXMLEdicaoType.Get_Artigos: IXMLArtigosType; begin Result := ChildNodes['artigos'] as IXMLArtigosType; end; function TXMLEdicaoType.Get_Equipa: IXMLEquipaType; begin Result := ChildNodes['equipa'] as IXMLEquipaType; end; function TXMLEdicaoType.Get_Pdf: UnicodeString; begin Result := ChildNodes['pdf'].Text; end; procedure TXMLEdicaoType.Set_Pdf(Value: UnicodeString); begin ChildNodes['pdf'].NodeValue := Value; end; { TXMLImagensType } procedure TXMLImagensType.AfterConstruction; begin RegisterChildNode('capas', TXMLCapasType); RegisterChildNode('paginas', TXMLPaginasType); inherited; end; function TXMLImagensType.Get_Capas: IXMLCapasType; begin Result := ChildNodes['capas'] as IXMLCapasType; end; function TXMLImagensType.Get_Paginas: IXMLPaginasType; begin Result := ChildNodes['paginas'] as IXMLPaginasType; end; { TXMLCapasType } procedure TXMLCapasType.AfterConstruction; begin RegisterChildNode('capa', TXMLCapaType); ItemTag := 'capa'; ItemInterface := IXMLCapaType; inherited; end; function TXMLCapasType.Get_Capa(Index: Integer): IXMLCapaType; begin Result := List[index] as IXMLCapaType; end; function TXMLCapasType.Add: IXMLCapaType; begin Result := AddItem(-1) as IXMLCapaType; end; function TXMLCapasType.Insert(const Index: Integer): IXMLCapaType; begin Result := AddItem(Index) as IXMLCapaType; end; { TXMLCapaType } function TXMLCapaType.Get_Tamanho: UnicodeString; begin Result := AttributeNodes['tamanho'].Text; end; procedure TXMLCapaType.Set_Tamanho(Value: UnicodeString); begin SetAttribute('tamanho', Value); end; { TXMLPaginasType } procedure TXMLPaginasType.AfterConstruction; begin ItemTag := 'pagina'; ItemInterface := IXMLNode; inherited; end; function TXMLPaginasType.Get_Pagina(Index: Integer): UnicodeString; begin Result := List[index].Text; end; function TXMLPaginasType.Add(const Pagina: UnicodeString): IXMLNode; begin Result := AddItem(-1); Result.NodeValue := Pagina; end; function TXMLPaginasType.Insert(const Index: Integer; const Pagina: UnicodeString): IXMLNode; begin Result := AddItem(Index); Result.NodeValue := Pagina; end; { TXMLArtigosType } procedure TXMLArtigosType.AfterConstruction; begin RegisterChildNode('categoria', TXMLCategoriaType); ItemTag := 'categoria'; ItemInterface := IXMLCategoriaType; inherited; end; function TXMLArtigosType.Get_Categoria(Index: Integer): IXMLCategoriaType; begin Result := List[index] as IXMLCategoriaType; end; function TXMLArtigosType.Add: IXMLCategoriaType; begin Result := AddItem(-1) as IXMLCategoriaType; end; function TXMLArtigosType.Insert(const Index: Integer): IXMLCategoriaType; begin Result := AddItem(Index) as IXMLCategoriaType; end; { TXMLCategoriaType } procedure TXMLCategoriaType.AfterConstruction; begin RegisterChildNode('artigo', TXMLArtigoType); ItemTag := 'artigo'; ItemInterface := IXMLArtigoType; inherited; end; function TXMLCategoriaType.Get_Designacao: UnicodeString; begin Result := AttributeNodes['designacao'].Text; end; procedure TXMLCategoriaType.Set_Designacao(Value: UnicodeString); begin SetAttribute('designacao', Value); end; function TXMLCategoriaType.Get_Artigo(Index: Integer): IXMLArtigoType; begin Result := List[index] as IXMLArtigoType; end; function TXMLCategoriaType.Add: IXMLArtigoType; begin Result := AddItem(-1) as IXMLArtigoType; end; function TXMLCategoriaType.Insert(const Index: Integer): IXMLArtigoType; begin Result := AddItem(Index) as IXMLArtigoType; end; { TXMLArtigoType } function TXMLArtigoType.Get_Titulo: UnicodeString; begin Result := AttributeNodes['titulo'].Text; end; procedure TXMLArtigoType.Set_Titulo(Value: UnicodeString); begin SetAttribute('titulo', Value); end; { TXMLEquipaType } procedure TXMLEquipaType.AfterConstruction; begin ItemTag := 'membro'; ItemInterface := IXMLNode; inherited; end; function TXMLEquipaType.Get_Membro(Index: Integer): UnicodeString; begin Result := List[index].Text; end; function TXMLEquipaType.Add(const Membro: UnicodeString): IXMLNode; begin Result := AddItem(-1); Result.NodeValue := Membro; end; function TXMLEquipaType.Insert(const Index: Integer; const Membro: UnicodeString): IXMLNode; begin Result := AddItem(Index); Result.NodeValue := Membro; end; { TXMLEquipaType2 } end. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
pikax Posted February 3, 2014 at 09:46 AM Report #543631 Posted February 3, 2014 at 09:46 AM True. Hei-de continuar a manter até que fique sem teclado 😛 Podes usar e abusar, está lá para isso. http://programar.sergioribeiro.com/programar.xml desconhecia, posso utilizar para a app do win8? 🙂 Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
ribeiro55 Posted February 3, 2014 at 09:56 AM Report #543635 Posted February 3, 2014 at 09:56 AM Força Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
Kline777 Posted February 3, 2014 at 10:08 AM Report #543637 Posted February 3, 2014 at 10:08 AM Nice 🙂 Em termos de código a coisa é bastante directa... agora para ficar uma app android de jeito é que vai ser o triplo do tempo no layout e desempenho 😛
thoga31 Posted February 3, 2014 at 12:19 PM Author Report #543668 Posted February 3, 2014 at 12:19 PM (edited) @ribeiro55, obrigado por indicares o sítio onde tens o XML, confesso que já não me lembrava. 😉 @nunopicado, tenho de ver se isso funciona no Free Pascal, mas creio que não, a FCL-XML não inclui essas units. Sabes que eu não uso o Delphi, e já não seria a primeira vez que não conseguia usar algo útil fornecido por ti. O mais provável é ter de procurar pela net ou, em último caso, fazer eu um pequeno parser só para este XML em particular (o qual não é, aliás, difícil de analisar). Fico contente por ver que esta minha brincadeira que fiz numa tarde está a gerar interesse na criação de aplicações para a Revista. That's the spirit! 😄🙂 Edited February 3, 2014 at 12:20 PM by thoga31 Knowledge is free!
Kline777 Posted February 3, 2014 at 12:30 PM Report #543670 Posted February 3, 2014 at 12:30 PM Tens expressoes regulares no FreePascal? Pode ser uma soluçao facil...
nunopicado Posted February 3, 2014 at 12:31 PM Report #543671 Posted February 3, 2014 at 12:31 PM @nunopicado, tenho de ver se isso funciona no Free Pascal, mas creio que não, a FCL-XML não inclui essas units. Sabes que eu não uso o Delphi, e já não seria a primeira vez que não conseguia usar algo útil fornecido por ti. O mais provável é ter de procurar pela net ou, em último caso, fazer eu um pequeno parser só para este XML em particular (o qual não é, aliás, difícil de analisar). Pode ser que funcione... Esta unit, e todos os objectos contidos, são gerados automaticamente a partir do XML. Experimenta se funciona, mas se não funcionar, é capaz de haver algo semelhante para FPC, não te ponhas a criar um parser para aquilo, que dás em doido num instante! 🙂 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Kline777 Posted February 3, 2014 at 09:48 PM Report #543773 Posted February 3, 2014 at 09:48 PM Bah, la estou eu a tentar reinventar a roda... era para usar uma ferramenta que fiz estes dias para importar ficheiros de texto mas já me estou a passar. Mais valia ter logo usado a tua unit nunopicado. Isto é gerado automaticamente?
nunopicado Posted February 3, 2014 at 10:05 PM Report #543782 Posted February 3, 2014 at 10:05 PM Bah, la estou eu a tentar reinventar a roda... era para usar uma ferramenta que fiz estes dias para importar ficheiros de texto mas já me estou a passar. Mais valia ter logo usado a tua unit nunopicado. Isto é gerado automaticamente? Sim... Num projecto aberto, fazes Novo -> XML -> XML Data Binding. Segues os passos, e voilá, tens as classes todas criadas e prontas a usar. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
thoga31 Posted February 3, 2014 at 10:49 PM Author Report #543804 Posted February 3, 2014 at 10:49 PM (edited) Versão 1.1.0-beta O código está reestruturado, apesar de ainda precisar de trabalho. A aplicação e o seu código estão sob a licença GNU GPL 3.0 sendo, portanto, open-source. Esta é a minha primeira aplicação open-source. 🙂 Edited February 3, 2014 at 10:59 PM by thoga31 Knowledge is free!
Kline777 Posted February 4, 2014 at 12:22 AM Report #543842 Posted February 4, 2014 at 12:22 AM Sim... Num projecto aberto, fazes Novo -> XML -> XML Data Binding. Segues os passos, e voilá, tens as classes todas criadas e prontas a usar. Funciona bem no windows mas crasha no android por causa duma ' num dos titulos dos artigos :/ será limitaçao do android ou parvoeira desse XML que ele gera? 😞
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now