Autor Beitrag
behbeh
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20


Delphi 7
BeitragVerfasst: So 26.10.08 19:37 
Hallo,
frage mich gerade, wie ich aus einem News Ticker z.B. "http://www.heise.de/newsticker/heise.rdf" die ertse Meldung auslesen kann mit Delphi. Darauf gekommen bin ich dadurch, das es ein Programm bei "www.pollin.de" für eine Led Zeile gibt, das sich LED Ticker nennt. Jetzt habe ich hier auch eine Led Zeilen Laufschirft, nur die ist nicht kompatibel zu der Pollin Led Zeile( Sie stammt aus einer Kleindienst Waschstrasse"). Ich möcht jetzt gerne mir so ein kleines Delphi(7) Programm schrieben, was genau das gleiche macht, nur eben kompatibel zu meiner Ledlauftschrift. Davon weiss ich natuerlich wie ich die ansteuern muss...(Programm ist schon fertig). Kann mir da jemand mal einen Tip geben, wie ich da auf diese Nachrichten zugreifen kann?...
Vielen Dank
Bernd
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: So 26.10.08 19:56 
// Edit: "hier stand Quark "

Wie wäre es mit rss-feeds ?

// Noch 'n Edit:
Das ist doch schon eine XML Datei, die brauchst du doch nur noch parsen.

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
behbeh Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20


Delphi 7
BeitragVerfasst: Mo 27.10.08 11:28 
// Edit: "hier stand Quark "

Wie wäre es mit rss-feeds ?

// Noch 'n Edit:
Das ist doch schon eine XML Datei, die brauchst du doch nur noch parsen.


Sorry für meine dummen Fragen.
1.
Von rss-feeds habe ich mal was gelesen, gibt es z.B. bei Elektor, ich glaub bei uns auch(www.uni-muenster.de).
Was kann man damit machen, was ist das?
2.
was ist parsen? Kenn ich nicht...

Bernd
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Mo 27.10.08 11:57 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
unit Unit1   // Heise Tickertext;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    TickerText: String;
    function CopyFileFromURL(const URL: string; MS: TMemoryStream): integer;
    procedure ParseStrings(Memo: TMemo);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses
  WinINet;

{$R *.dfm}

const
  urlHeiseNews = 'http://www.heise.de/newsticker/heise.rdf';

function TForm1.CopyFileFromURL(const URL: string; MS: TMemoryStream): Integer;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[0..BufferSize - 1of Char;
  BufferLength: DWORD;
  ByteCount: DWORD;
begin
  Result := -1;
  ByteCount := 0;

  if Assigned(ms) then
  begin
    hSession := InternetOpen(PChar(Application.Title),
      INTERNET_OPEN_TYPE_PRECONFIG, nilnil0);
    try
      if Assigned(hSession) then
      begin
        hURL := InternetOpenURL(hSession, PChar(URL), nil000);
        try
          if Assigned(hURL) then
          begin
            MS.Position := 0;
            repeat
              InternetReadFile(hURL, @Buffer, BufferSize, BufferLength);
              MS.WriteBuffer(Buffer, BufferLength);
              Inc(ByteCount, BufferLength);
              Application.ProcessMessages;
            until BufferLength = 0;
            Result := ByteCount;
          end;
        finally
          InternetCloseHandle(hURL);
        end;
      end;
    finally
      InternetCloseHandle(hSession);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ms: TMemoryStream;
  s: string;
  c: char;
  i,n: integer;
begin
  memo1.Enabled := FALSE;

  ms := TMemoryStream.Create;
  try
    memo1.Clear;
    s := '';
    i := CopyFileFromURL(urlHeiseNews, ms);
    if  i > 0 then
    begin
      ms.Seek(0, soBeginning);
      for n := 0 to ms.Size-1 do
      begin
        ms.ReadBuffer(c, 1);
        if c in [#10,#13then
        begin
          memo1.Lines.Add( Utf8ToAnsi(s));
          s := '';
        end else
        begin
          if c in [#9then c := #32;
          s := s + c;
        end;
      end;
    end;
  finally
    ms.Free;
  end;

  if Memo1.lines.Count > 0 then
  begin
    ParseStrings(Memo1);
    memo1.Enabled := TRUE;
  end;
end;

procedure TForm1.ParseStrings(Memo: TMemo);
var
  sl: TStringList;
  n: integer;
  s: string;
  xItem, xTitle: boolean;
begin
  TickerText := '';

  sl := TStringList.Create;
  try
    sl.Assign(Memo.Lines);
    Memo.Clear;
    for n := 0 to sl.Count - 1 do
    begin
      if pos('<item>', sl.Strings[n])<>0 then xItem := TRUE;
      if pos('</item>', sl.Strings[n])<>0 then xItem := FALSE;
      if pos('<title>', sl.Strings[n])<>0 then xTitle := TRUE;

      if xItem and xTitle then
      begin
        s := sl.Strings[n];
        s := copy(s, pos('<title>',s)+7, pos('</title>',s)-10);
        TickerText := TickerText  + ' - ' + s;
        Memo.Lines.Add(s);
      end;

      if pos('</title>', sl.Strings[n])<>0 then xTitle := FALSE; 
    end;
  finally
    sl.Free;
  end;

  Label1.Caption := TickerText;
end;

procedure TForm1.Timer1Timer(Sender: TObject);

  function TextScroller(Text: String): String;
  begin
    Result := Copy (Text,2,length(Text)-1) + Text[1];
  end;

begin
  Label1.Caption := TextScroller(Label1.Caption);
end;

end.


Ich habe gar kein XML. 8)
Ist ein wenig steiff programiert, dafür aber in nur 10 Minuten...
Einloggen, um Attachments anzusehen!
_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Mo 27.10.08 14:46 
user profile iconbehbeh hat folgendes geschrieben Zum zitierten Posting springen:
// Edit: "hier stand Quark "

Wie wäre es mit rss-feeds ?

// Noch 'n Edit:
Das ist doch schon eine XML Datei, die brauchst du doch nur noch parsen.


Sorry für meine dummen Fragen.
1.
Von rss-feeds habe ich mal was gelesen, gibt es z.B. bei Elektor, ich glaub bei uns auch(www.uni-muenster.de).
Was kann man damit machen, was ist das?
2.
was ist parsen? Kenn ich nicht...

Bernd


Also, vll noch eine Erklärung und nich nur roher Quelltext wie von Turbo Pascal.
Zu deinen Fragen (sind nich dumm):
1. RSS Feeds werden mittlerweile anstatt Websites für einfache schnelle News übertragung benutzt.
Vorteil, man muss zB zum anzeigen dieser News nicht auf eine Internetseite gehen, sondern kann sie in einem beliebigen Newsreader Programm anzeigen.
Diese RSS Feeds werden in einem XML Format geschrieben. Das gleicht optisch erstmal sehr dem HTML Format. Nur werden beim XML Struktur und keine Design Informationen für die Tags benutzt.

2. Parsen bedeutet, aus dieser XML Struktur die Informationen herausfiltern.

Auf Heise bezogen sieht der RSS Feed etwa so aus (etwas vereinfacht...):
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">

<channel>
  <title>heise online News</title>
  <link>http://www.heise.de/newsticker/</link>
  <description>Nachrichten nicht nur aus der Welt der Computer</description>
</channel>


<item>
  <title>Ver.di protestiert gegen Verkauf ostdeutscher Telekom-Callcenter</title>
  <link>http://www.heise.de/newsticker/Ver-di-protestiert-gegen-Verkauf-ostdeutscher-Telekom-Callcenter--/meldung/117979/from/rss09</link>
</item>

</rdf:RDF>

Die oberste Zeile gibt an, dass es sich um eine XML Datei handelt, die verwendete Version und das Zeichenformat (für dich erstmal nicht sooo wichtig).
Die zweite Zeile gibt an, dass das Dokument im RDF Standard vorliegt, konform des RDF Standards nach dem WWW Consortium.
Diese Zeile ist auch nicht so entscheidend für dich.
Danach folt eine Beschreibung des Channels, könnte man als Überschrift für die folgenden Nachrichten sehen.
Hier sieht man schon die Struktur von XML.
Erst wird ein Node Channel geöffnet ("<channel>"), zu diesem Node gehören mehrere Child Nodes wie ("<title>","<link>", ...) und diese enthalten Informationen.
Die bezeichnungen sollten selbsterklärend seind, Title ist in diesem Fall der Titel dieses Channels, Link ist die URL für Browser in der man die Informationen erhält.
Und description ist die Erklärung zum Titel :lol:
Nunja, soweit sind wir schonmal.
Der wichtigste Teil für dich sind die einzelnen Items.
Sie liegen immer in der selben Form vor:
<item> gibt an dass ein neues Item beginnt.
Zu jedem Item gibt es einen <title> und einen <link>. Der Link sollte für dein LCD völlig Egal sein. Dich interessiert eher der <title>
Das Ende eines Items wird durch </item> angegeben.


Soviel zur Erklärung des Heise-Feeds.
Wie könntest du vorgehen:
Als erstes musst du die RSS Datei herunterladen. Dazu könntest du zB URLDownloadToFile oder die TIdHTTP klasse aus den Indys nehmen.
Wenn du den Inhalt der Datei vorliegen, solltest du sie nach Start eines jeden <item> suchen und darin weiter nach dem <title>.
Dann von <title> bis </title> den STring kopieren und benutzen.
Dazu sollten Pos Copy und Delete hilfreich sein.
Wie dus aufs LCD zauberst weiß ich nicht, such einfach mal im Forum nach LCD odersowas ....
findet sich bestimmt was.

MfG, Fighter#1

Moderiert von user profile iconmatze: Code- durch XML-Tags ersetzt

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
behbeh Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20


Delphi 7
BeitragVerfasst: Mo 27.10.08 21:35 
Hallo turbopascal, Hallo fighter,
vielen Dank für Eure Erklärungen. Das habe ich alles verstanden, ich habe auch schon Homepages erstellt in Html. Aber das ist schon etwas her, und die neuen(!) Sachen mit xml und so weiter sind wohl mit der zeit an mir vorbei gegangen.
Man kann sich eben nicht um alles kümmern. Fighter! es ist eine Led Zeile.. Die habe ich vor ein paar Jahren aus einer alten Autowaschstarsse ausgebaut. Dann habe ich sie zerlegt, mir das EProm ausgelesen, somit hatte ich die Ansteuerbefehle heraus bekommen. Mit Hilfe des Programms von TurboPascal ist praktisch die Sache schon erledigt.
Ich hatte mir ein kleines Steuerprogramm in Delphi geschrieben. Das klappt gut. Jetzt sah ich dieses Programm bei "www.pollin.de" für deren Led Zeile die die verkaufen. Jetzt denke habe ich das selbe, nur größer...

Ich kann mich nur ganz herzlich bei euch bedanken.
Ich programmiere zwar viel in Delphi, (habe mal in der Firma,UNI MS) ein Programm fuer eine ziemlich teure
AD-Wandlerkarte geschieben, das habe ich alles hinbekommen, aber wenn da eine Sache kommt, von der ich noch nie was gesehen habe, bin ich völlig aufgeschmissen.( Wie jetzt mit dem Internet zugriff).

Vielen Dank
Bernd
P.S.
Wenn ich euch irgendwie mit elektronischen Sachen weiter helfen kann, ich kann viel machen bei uns an der Uni....