Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Rapidshare.com --- Ein Datei hochladen (https://www.delphipraxis.net/116364-rapidshare-com-ein-datei-hochladen.html)

buster55 27. Jun 2008 12:25


Rapidshare.com --- Ein Datei hochladen
 
DAS GANZE BOARD WURDE DURCHSUCHT UND ICH KONNTE DEFINITIV KEINE FÜR MICH GEEIGNETE LÖSUNG FINDEN, WAS ENTWEDER AUS MEINER UNFÄHIGKEIT ODER AUS DER MANGELDEN BEHANDLUNG DIESES THEMAS IM BOARD RESULTIERT! :mrgreen:
servus :mrgreen:

mein vorhaben ist folgendes: ich möchte ein simples tool schreiben das auf rapidshare.com eine datei hochlädt.
ich diesbezüglich schon was ausprobiert. ich hatte zuerst vor auf rapidshare das edit feld zum uploaden der datei (das feld in das der lokale link zur datei reinkommt) per script zu füllen, das muss man sich so vorstellen:

Delphi-Quellcode:
 
function WbEnumFields(WebBrowser: TWebBrowser; SL: TStrings): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := True;
  //Hat das Dokument Forms? (Frames)
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
  begin
    Result := False;
    Exit;
  end;
  //Bearbeite alle Frames
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    // Bearbeite alle Felder eines Frames
    for j := 0 to FormItem.Length - 1 do
    begin
      try
        SL.Add(FormItem.Item(j).Name);
      except
        Result := False;
        Exit;
      end;
    end;
  end;
end;


// Durchsuche alle Formulare im Webbrowser nach dem Feldnamen
// Übergabe:
// Webbroweser: Webbrowser, der die aktuelle Seite enthält
// FieldName : Name des gesuchten Felds
// Rückgabe
// Field     : Field.x : Frame Nummer
//            : Fielf.y : Feld Nummer im Frame
// Result    : true -> Feld existiert
//            : false -> Feld existiert nicht
//                       oder kein Dokument geladen
function WbFindField(WebBrowser: TWebBrowser; FieldName: string; var Field: TPoint): boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //Hat das Dokument Forms? (Frames)
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
  begin
    Exit;
  end;
  //Bearbeite alle Frames
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    // Bearbeite alle Felder eines Frames
    for j := 0 to FormItem.Length - 1 do
    begin
      try
        // Feldname wurde gefunden
        // gebe ihn zurück und ende
        if FormItem.Item(j).Name = FieldName then
        begin
          Field.x := i;         // Position speichern
          Field.Y := j;
          Result := True;
          exit;
        end;
      except
        Exit;
      end;
    end;
  end;
end;


// Trage Text in ein Editfeld ein
// Übergabe:
// Webbroweser: Webbrowser, der die aktuelle Seite enthält
// FieldName : Name des gesuchten Felds
// Rückgabe
// Value     : Der Text, der in das Feld hinein soll
// Result    : true -> kein Fehler
//            : false -> Feld existiert nicht
//                       oder kein Dokument geladen
function WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
  Field: TPoint;
begin
  // Position des Felds holen
  if not WbFindField(WebBrowser, FieldName, Field) then
  begin
    Result := false; // Feld existiert nicht
    exit;            // Ende
  end;
  try
    // Feld füllen
    WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value := Value;
    Result := True;
  except
    Result := false;
    Exit;
  end;
end;


// Lese Text aus einem Editfeld
// Übergabe:
// Webbroweser: Webbrowser, der die aktuelle Seite enthält
// FieldName : Name des gesuchten Felds
// Rückgabe
// Value     : Text, der im Feld steht
// Result    : true -> kein Fehler
//            : false -> Feld existiert nicht
//                       oder kein Dokument geladen
function WbGetEditField(WebBrowser: TWebBrowser; FieldName: string; var Value: string): Boolean;
var
  Field: TPoint;
begin
  // Position des Felds holen
  if not WbFindField(WebBrowser, FieldName, Field) then
  begin
    Result := false; // Feld existiert nicht
    exit;            // Ende
  end;
  try
    // Feld lesen
    Value := WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value;
    Result := True;
  except
    Result := false;
    Exit;
  end;
end;
so ist es im endeffekt möglich die seite nach dingen wie edit felder, buttons, ceckboxen und allen möglichen anderem kram zu scannen, und das so:
Delphi-Quellcode:
WbEnumFields(WebBrowser1, ListBox1.Items);
das einzige was ich damit ereiche ist ein eintrag mit dem namen 'filecontent'
und wenn ich das versuche zu bearbeiten:
Delphi-Quellcode:
WbSetEditField(WebBrowser1, 'filecontent', 'C:\...');
...tut sich garnichts :?
die MozillaFirefox komponente unterstützt so etwas nicht...

----
was ich nun ereichen möchte ist das mir anhand einer lokalen datei adresse auf dem computer (C:\...)der lösch- und der downloadlink der hochgeladenen datei, am besten in einer memo,richedit (log-datei ähnlich) übermittelt wird.
am besten wäre es wenn ich dafür nicht mit dem webbrowser arbeiten müsste (vieleicht mit indy irgendwas zaubern..?)
----
WICHTIG:
So ein Tool zu programmieren ist 100% legal da rapidshare selbst ein opensource perl script anbietet das es ermöglicht datein hochzuladen, nur leider verstehe ich nchits von perl :(
http://images.rapidshare.com/software/rsapiresume.pl

man beachte das ich mich was internet bzw online programmierung erst noch ein wenig zurecht finden muss, also wäre es gut wenn man mir gut erklären würde wie es geht , ich will schließlich dazu lernen und nicht einfach ein fertiges script ohne jeglich erklärung an den kopf geworfen kriegen ;)
der user der das schafft bekommt natürlich einen (virtuellen) kuss von mir :mrgreen: :mrgreen:

dann legt mal los :-P

liebe grüße
buster

rollstuhlfahrer 27. Jun 2008 13:18

Re: Rapidshare.com --- Ein Datei hochladen
 
Es wird zwar etwas umständlich, sollte aber funktionieren.
Als erstes suchst du mit IdHTTP die Hauptseite auf. Dabei gibts ein Formular, welches per POST Daten verschickt. Dabei gibts eine Sitzung. Deren ID steht in der Adresse vom Formular. Das ist Parameter 1. Dann muss die Datei noch per POST über idHTTP verschickt werden (wie weiß ich nicht). Auf der weitergeleiteten Seite (hier musst du glaub ich JavaScript parsen) stehen dann Link und Löschlink.

Bernhard

mschnell 27. Jun 2008 13:25

Re: Rapidshare.com --- Ein Datei hochladen
 
Hi buster
ich denke dein Problem ist das "filecontent" kein edit feld ist sondern ein "file" input
dieser hat keinen value(bzw unterstützen ihn die meisten browser wohl nicht) und den kannst du also auch nicht setzen

ich kann dir leider auch nicht sagen wie du das mit delphi gefüllt kriegst...

hab aber nen andern thread dazu gefunden

vielleicht hilft der dir ja weiterclick

buster55 27. Jun 2008 14:02

Re: Rapidshare.com --- Ein Datei hochladen
 
JAAAAAAA!!!
es funktioniert!!!
:love: :love: lieben dank an euch beide habt mich drauf gebracht,
jetzt erscheint der UPLOAD knopf im bild gibts ne möglichkeit den webbrowser auf ein bestimmtes bild oder auf eine bestimmte position klicken zu lassen ??

toms 27. Jun 2008 14:08

Re: Rapidshare.com --- Ein Datei hochladen
 
Zitat:

Zitat von buster55
gibts ne möglichkeit den webbrowser auf ein bestimmtes bild oder auf eine bestimmte position klicken zu lassen ??


WB_ClickImage(Webbrowser1,'btnupload');

SirThornberry 27. Jun 2008 14:11

Re: Rapidshare.com --- Ein Datei hochladen
 
Wenn du die Webseite nicht anzeigen willst ist es überflüssig TWebbrowser etc. zu nutzen was dir die Webseite darstellt. Nutze einfach TIdHttp und sende die entsprechenden Felder direkt.

buster55 27. Jun 2008 14:15

Re: Rapidshare.com --- Ein Datei hochladen
 
ist mit sicherheit ne gute idee allerdings müsstest du mir zeigen wie das geht, ausserdem kann man das bild nicht anklicken da RS die adresse zum bild verschlüsselt und selbst wenn man die adresse rausfindet der browser damit nicht umgehen kann.
also brauch ich ne erklärung für TIdHttp und ne möglichkeit webbrowser auf bestimmte stellen im bild klicken zu lassen

toms 27. Jun 2008 14:37

Re: Rapidshare.com --- Ein Datei hochladen
 
Zitat:

Zitat von buster55
jetzt erscheint der UPLOAD knopf im bild gibts ne möglichkeit den webbrowser auf ein bestimmtes bild oder auf eine bestimmte position klicken zu lassen ??

Der Button sollte so zu finden sein:

Delphi-Quellcode:
document.getElementById('btnupload')
(Siehe HTML Quelltext)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz