PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (Sonstige) - share-links.biz: Link zum Statusimage bekommen



Cannonau
12.05.2016, 18:48
Hallo,

ich möchte per cURL das GIF-Statusimage zu einem Ordner von SL holen. Leider geht das nicht über die API, also versuche ich's "zu Fuß", aber bin bisher gescheitert.

Versucht habe ich bis jetzt:


http://share-links.biz/manage?op=stimg&fc=ABCDEF

http://share-links.biz/manage?op=stimg&chkFolder[]=123456

Das scheint nicht der richtige Weg zu sein. Ich habe auch schon in den Intelligen-Sources herumgeporkelt, aber in uShareLinksBiz.pas nichts Verwertbares gefunden.

Kann mal jemand meine kaputte Eisenbahn wieder auf die Schiene setzen? Ich hab' anscheinend eine dicke Eichenbohle vor dem Kopf.

Cannonau

Jana-Maria
12.05.2016, 18:53
128 oder 129?
In der 128 gehts nur sehr schwer.
In der 129 solls wohl ganz einfach gehen.

Cannonau
13.05.2016, 14:26
So steht's zumindest bei TL zu lesen, aber IT hat mit diesem Crypter auch so seine Probleme - ich habe mal testweise damit (129.2) gecrypted, aber der Status des Ordners in IT bleibt unknown, obwohl der Ordner erstellt wurde und funktioniert.

Das ist für mich aber Nebensache, weil ich Intelligen nicht einsetze, ich habe nur den Quellcode durchwühlt, um zu sehen, ob ich da herauslesen kann, wie man an den Link zum Statusimage kommt, ohne das Webinterface im barocken Design zu nutzen.

Cannonau

- - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -

Ich habe mir das nochmal genauer angesehen, sieht aus, als käme man da ohne JS nicht weit, das ist wohl auch der Grund, wieso Intelligen das kann.

Hat jemand eine fertige Lösung für das Problem, z.B. mit PhantomJS, in der Schublade und teilt sie oder muß der alte, gebrechliche Mann sich tatsächlich entlang seiner viel zu flachen Lernkurve zum Tempel der Weisheit bemühen?

Cannonau

Sairenji
13.05.2016, 16:37
Intelligen kann das nicht, selbst 129 nicht. Nur als Info. Siehst aber auch in den Dateien die schon angeguckt hattest^^

Gesendet mit Tapatalk

1stAid
13.05.2016, 21:03
Du bekommst das Pic nicht über die Api. Daher muss man zwangsläüfig über die Webpage. Auch wenn Tools das automatisch machen tun sie das.
Gruß

Uranjitsu
22.05.2016, 20:55
Dafür hätte ich auch gerne eine Lösung in php... bekomme es nicht hin.

Cannonau
23.05.2016, 09:39
Wie weit seid Ihr denn bisher gekommen?

Login und Abruf der Managementseite funktioniert, sendet man aber den GET-Request, werde ich auf die Newsseite umgeleitet. Da im Browser der Abruf des StImg auch mit ausgeschaltetem JS funktioniert, vermute ich, daß es nur eine Kleinigkeit ist, die ich / wir einfach nicht sehe(n).

Cannonau

darkness
23.05.2016, 10:11
Wollte heute Nacht auch mal mein Glück versuchen. Ich sehe an keiner Stelle eine Möglichkeit ein Status Image abzurufen. Im Manager wird mir nur ein Hoster Icon angezeigt, im Ordner wird das Status Image direkt auf ein Bild gelinkt /offline.png (oder so) Hat SL überhaupt Status Images?

Cannonau
23.05.2016, 14:02
Ja, haben sie. Wenn man im Manager mind. einen Order auswählt und die entsprechende Option im Dropdown-Feld auswählt, erscheint unten ein Textfeld mit den Links.

1stAid hat das anscheinend sogar schon gelöst, ich hatte einen Thread bei TL gefunden, wo er geschrieben hat, daß er dafür einen "Scriptbrowser" einsetzt - ich nehme an, daß er damit so etwas wie PhantomJS o.ä. meint. Kann leider nicht dorthin verlinken, da mindestens TL seit dem Wochenende down ist, aber weitere Infos hatte ich dort ohnehin nicht gefunden.

Cannonau

darkness
23.05.2016, 14:23
Also Login per CURL geht nicht? Und dann halt mit dem Content arbeiten?

Kommt man an dem Kack CloudFlare überhaupt vorbei? Wollte mein Glück probieren ...

Cannonau
23.05.2016, 14:40
Login geht, wenn man den Redirects folgt. Ich weiß leider nicht genau, wie sich libcurl unter php verhält, ich nutze eine Standalone-Version, da muß man das Flag "--post302" setzen, sonst wird man beim Loginversuch auch auf die Newsseite umgeleitet. Hoffe, das hilft Dir beim Start ;-)

Edit: Cloudflare war bei meinen Tests kein Problem.

Cannonau

darkness
23.05.2016, 15:05
Normal müsstest du doch nur ein POST Request an manager mit den Values op=stimg_png&chkFolder[]=6972259 senden?

Cannonau
23.05.2016, 15:17
Ja, das DACHTE ich auch. Aber bei mir (TM) bewirkt das nur eine Umleitung wie oben beschrieben. Sag' nicht, bei Dir funktioniert's?

Cannonau

darkness
23.05.2016, 15:32
Ne ich bin noch bei Cloudflare ...

Uranjitsu
26.05.2016, 16:34
Wenn du via cURL das Cloudflare Problem hast, einfach folgendes verwenden:

curl_setopt($ch2, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
Klappt jedenfalls bei mir.

Ich habe auch schon einiges versucht, aber ich komme auch nicht an dem Status-Image...

Hier der Thread von 1stAid: [Erledigt] Statusanzeige bei share-links.biz - IntelligeN Support - The Lounge (http://the-lounge.org/board156-supported-sites/intelligen-support/51443-statusanzeige-bei-share-links-biz/#post413435)

Ich suche halt eine Lösung für PHP.

Ich habe es auch versucht aus dem Quelltext zu bekommen... aber bisher war alles ohne Erfolg.

1stAid
26.05.2016, 17:27
in Delphi.. ihr könnt es euch ja übersetzen

var
Daten : TIdMultiPartFormDataStream;
s1,s2,UrlString : string;
Http : TIdHttp ;
match: TMatch;
sList: TStringList;
begin
UrlString:= AurlString;
UrlString:= StringReplace(UrlString,'http://share-links.biz/_','',[rfIgnoreCase]);

Result:= False;
Http := TIdHttp.Create(nil);
try
Http.HandleRedirects := True;
Http.RedirectMaximum := 5;
Http.CookieManager := idckmngr1;
Http.AllowCookies:=True;
HTTP.Request.UserAgent := 'Opera/9.80 (Windows NT 6.1; U; de) Presto/2.5.22 Version/10.51' ;
HTTP.Request.Accept := 'text/html, */*';
sList:= TStringList.Create;
try
sList.Add('user' + aEinstellungen[22]);
sList.Add('pass' + aEinstellungen[23]);
try
s1:=Http.Post('http://share-links.biz/login',sList);
except
mmo1.Lines.Add('fehler in 1');
Exit;
end;
finally
sList.Free;
end;

try
s2:=Http.Get('http://share-links.biz/manage?search=' + UrlString);
if TRegEx.IsMatch(s2,'name\=.chkFolder\[\]. value\=.[\d]*\"') then
begin
match := TRegEx.Match(s2, 'name\=.chkFolder\[\]. value\=.[\d]*\"');
match := TRegEx.Match(match.Value, '[\d]*');
end;

except
mmo1.Lines.Add('fehler in 2');
Exit;
end;
sList:= TStringList.Create;
try
sList.Add('op=stimg_png');
sList.Add('chkFolder[]=' + match.Value) ;


try
s2:=Http.Post('http://share-links.biz/manage?search=' + UrlString,Daten);
match := TRegEx.Match(s2, 'http\:\/\/stats\.share\-links\.biz\/[\w]*\.png');
Result:= True;
except
on e: Exception do
begin
mmo1.Lines.Add(e.message);
mmo1.Lines.Add('fehler in 3');
Exit;
end;
end;
if TRegEx.IsMatch(s2,'Es wurden keine geschützen Ordner gefunden') then
begin
mmo1.Lines.Add('Fehler durch ShareLinks kein Ordner gefunden') ;
if TRegEx.IsMatch(s2,'Sie sind eingeloggt als') then mmo1.Lines.Add('Loggin scheint OK')
else mmo1.Lines.Add('Loggin ist eventuell falsch') ;
end;
finally
sList.Free;
end;
finally
Http.Free;
end;
aResultPic:= match.Value;

Ui is der Code alt ... aber er tut seit Jahren treu seinen Dienst, auch wenn ich doch heute (etwas) anders schreiben würde ......

Uranjitsu
26.05.2016, 17:46
Jetzt muss das nur in PHP übersetzt werden :) (Das kann ich leider nicht)
Aber danke für die Freigabe !

Wenn das jemand in PHP übersetzen kann, würde ich das im SSBG (https://www.szenebox.org/19-projektplanung/2705-ssbg-simple-szene-bbcode-generator/#post16548) verbauen.

jbs
26.05.2016, 19:01
Der Code von 1stAid macht eigentlich nix anderes, wie die ID des Links zu extrahieren, dann bei Share-Online einloggen und im Login Bereich eine Statusprüfung mit der ID abzusenden. Dann vom Ergebnis den Bildnamen auslesen und entsprechend on oder off zurückgeben.

1stAid
26.05.2016, 19:58
Ist ja auch nix anderes als auf der Webseite
Die Ordnerid wird auf der Webseite gesucht, da die Unique sind, bleibt 1 Ordner der wird auf der Webseite gecheckt. Dann die Webseite nach dem .png unten geparst.
Der Code funktioniert seit 4-5 Jahren ohne Probleme.

Uranjitsu
27.05.2016, 15:20
Der Login wird überwunden und nur der gesuchte Ordner ausgegeben.
Aber

&chkFolder[]=XXXX&op=stimg_png&submit=los
zeigt keine Funktion.... und zeigt dementsprechend den generierten Code nicht an.






<?php


$username = 'xxx';
$password = 'xxx';
$loginUrl = 'http://share-links.biz/login';
//$sl_unique_link = str_replace("http://share-links.biz/", "", "http://share-links.biz/_ird5u7o6soto");
$sl_search_file = "9512058699fc04289f4f84e7f";

//init curl
$ch = curl_init();

//Set the URL to work with
curl_setopt($ch, CURLOPT_URL, $loginUrl);

// ENABLE HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

//Set the post parameters
curl_setopt($ch, CURLOPT_POSTFIELDS, 'remember_me=1&user='.$username.'&pass='.$password.'&submit=Login');

//Handle cookies for the login
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');


//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//execute the request (the login)
$store = curl_exec($ch);

//the login is now done and you can continue to get the
//protected content.

//set the URL to the protected file
curl_setopt($ch, CURLOPT_URL, 'http://share-links.biz/manage?search='.$sl_search_file.'&chkFolder[]=XXXX&op=stimg_png&submit=los');

//execute the request
$content = curl_exec($ch);

//save the data to disk
//file_put_contents('~/download.zip', $content);


echo $content;

1stAid
27.05.2016, 16:26
Wo holst du dir den die
<input type="checkbox" name="chkFolder[]" value="6970000" class="chkFolder vtext-middle">
diese Value(value="6970000" )?
Die musst du dir nach dem suchen der nach der Ordnerid "ird5u7o6soto" holen
danach sendest du die 2 Parameter
'op=stimg_png'
'chkFolder[]=' + match.Value
an die Seite
an der Stelle hast du nur xxxx stehen statt der gesucht/gefundenen OrdnerNummer

Uranjitsu
27.05.2016, 16:51
XXX habe ich hier nur ersetzt.

- Das Script logt sich ein
- Das Script sucht nun anhand der ID nur den ordner "ird5u7o6soto"
- Dann soll ja der BBCode generiert werden:

http://share-links.biz/manage?search=ird5u7o6soto&chkFolder[]=6979733&op=stimg_png

Das Problem ist aber, dass der Submit via

onclick="javascript:return submitForm();"
stattfindet.

Sonst würde der Aufruf im Browser mit:

http://share-links.biz/manage?search=ird5u7o6soto&chkFolder[]=6979733&op=stimg_png
genügen. Das funktioniert ja ebenfalls nicht.



$username = 'XXX';
$password = 'XXX';
$loginUrl = 'http://share-links.biz/login';
$sl_unique_link = str_replace("http://share-links.biz/_", "", "http://share-links.biz/_ird5u7o6soto");

//init curl
$ch = curl_init();

//Set the URL to work with
curl_setopt($ch, CURLOPT_URL, $loginUrl);

// ENABLE HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

//Set the post parameters
curl_setopt($ch, CURLOPT_POSTFIELDS, 'remember_me=1&user='.$username.'&pass='.$password.'&submit=Login');

//Handle cookies for the login
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');


//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//execute the request (the login)
$store = curl_exec($ch);

//the login is now done and you can continue to get the
//protected content.

//set the URL to the protected file
curl_setopt($ch, CURLOPT_URL, 'http://share-links.biz/manage?search='.$sl_unique_link.'&chkFolder[]=6979733&op=stimg_png&submit=los');

//execute the request
$content = curl_exec($ch);

//save the data to disk
//file_put_contents('~/download.zip', $content);


echo $content ;

jbs
27.05.2016, 17:28
Das ist ein POST Request der da abgeschickt wird, kein GET Request. Deshalb klappts auch nicht wenn dus nur über die URL machen willst. Also Formualr abschicken mit neuen Fields und dann die Ergebnisseite nach dem PNG durchsuchen und Online oder Offline zurückgeben, je nachdem welches PNG gefunden wird.
Du kannst das Bild nicht einfach so über ne URL oder ID einbinden. Das geht nicht.

darkness
27.05.2016, 17:31
Ich habe es mal finalisiert. Funktioniert super!


<?php
$username = 'justatest';
$password = 'justatest';
$loginUrl = 'http://share-links.biz/login';
$sl_unique_link = str_replace("http://share-links.biz/_", "", "http://share-links.biz/_mg1gu7oztmz9");

//init curl
$ch = curl_init();

//Set the URL to work with
curl_setopt($ch, CURLOPT_URL, $loginUrl);

// ENABLE HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

//Set the post parameters
curl_setopt($ch, CURLOPT_POSTFIELDS, 'remember_me=1&user='.$username.'&pass='.$password.'&submit=Login');

//Handle cookies for the login
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');


//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//execute the request (the login)
$store = curl_exec($ch);

//the login is now done and you can continue to get the
//protected content.

//set the URL to the protected file
curl_setopt($ch, CURLOPT_URL, 'http://share-links.biz/manage?search='.$sl_unique_link.'&chkFolder[]=6979733&op=stimg_png&submit=los');

//execute the request
$content = curl_exec($ch);

// get the real folder id
preg_match('/<input type="checkbox" name="chkFolder\[\]" value="(\d+)" class="chkFolder vtext-middle" \/>/', $content, $match);

if(!isset($match[1])) die('could not extract real folder id');

curl_setopt($ch, CURLOPT_URL, 'http://share-links.biz/manage');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(

'op' => 'stimg_png',
'chkFolder[]' => $match[1]

));

$content = curl_exec($ch);

preg_match('/(http:\/\/stats\.share-links\.biz\/[0-9a-z]+\.png)/i', $content, $link);
if(!isset($link[1])) die('could not extract status image link');
echo $link[1];

//save the data to disk
//file_put_contents('~/download.zip', $content);


#echo $content ;

?>

Der Account wurde extra für diese Spielerei angelegt! ;)

Uranjitsu
27.05.2016, 17:51
Ahhh,

super. Das Funktioniert erstklassig.

Herzlichen Dank für die Zeit :)

darkness
27.05.2016, 18:14
Jetzt müsste man noch hinbekommen das so umzubauen das mit einem Funktionsabruf die Statusimages für mehrere Ordner abgreifbar sind. Kann man überhaupt auf Fremd Ids zugreifen?


Kann man überhaupt auf Fremd Ids zugreifen?
:meh, leider nicht sonst hätte ich nen kleinen Service gebaut :D

1stAid
27.05.2016, 19:05
Da wie mehrfach erwähnt ein login erforderlich ist, beantwortet sich die Frage hoffentlich ;)
bau eine Schleife.

Da man nur bedingt an die checkboxen id kommt.
Die man entweder über die Hauptseite kommt, oder über die Suche.
Wenn nun aber besagte id auf Seite 2 ist ... Pustekuchen
Abgesehen davon das du die unterschiedlichen .png dann den Id richtig zuordnen müsstest. Was schwierig werden kann.
Daher ist eine Schleife die bessere Wahl.

darkness
27.05.2016, 19:32
Ich kann mir schon vorstellen wie das geht ;) Naja ich habe halt gehofft das SL einen auch an fremde Status Images kommen lässt. Naja Pustekuchen ...

Cannonau
29.05.2016, 17:02
Hallo und danke für die ganzen Beiträge und Codebeispiele!

Nachdem ich jetzt zwei Codebeispiele durchsehen konnte und beide nur ganz einfache POST-Requests mit zwei Variablen für das Absenden des letzten Formulars verwenden, dazu keine exotischen Flags oder Header außer dem User-Agent gesetzt werden, muß ich wohl annehmen, daß sich das Standalone-cURL anders verhält als libcURL oder sogar buggy ist.

Bevor ich jetzt anfange, noch andere Kompilate komplett durchzutesten, werde ich die php-Lösung für den Einsatz auf der Kommandozeile anpassen und einbinden. Dank der guten php-Doku habe ich sehr schnell einen ersten Test durchführen können, mit positivem Ergebnis. Das hat nur 20 Minuten gedauert, da frickele ich jetzt nicht weiter mit dem Standalone herum, das lohnt nicht.

Die php-Lösung ist übrigens auch sichtbar performanter als das Standalone-cURL - gut zu wissen. :-)

Cannonau

Cannonau
20.02.2017, 14:09
Da das hier so inspirierend war, zeige ich auch noch einen Weg in Python mit Requests, schön schlank, allerdings roh und ohne Exception Handling:


import re, requests
# import sys

# _username = sys.argv[1]
# _password = sys.argv[2]
# _imgType = sys.argv[3]
# _folderID = sys.argv[4]
_username = 'justatest'
_password = 'justatest'
_imgtype = 'gif'
_folderID = 'mg1gu7oztmz9'

s = requests.Session()
s.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0'})
s.post('http://share-links.biz/login', data = {'user': _username, 'pass': _password, 'submit': 'Login', 'remember_me': 1})
_body = s.get('http://share-links.biz/manage', params = {'search': _folderID}).text
_folder_number = re.search(r'<input type="checkbox" name="chkFolder\[\]" value="(\d+)" class="chkFolder vtext-middle" \/>', _body).group(1)
_body = s.post('http://share-links.biz/manage', data = {'op': 'stimg', 'chkFolder[]': _folder_number}).text
_imglink = re.search(r'http:\/\/stats\.share-links\.biz\/[0-9a-z]+\.', _body).group(0)
print(_imglink + _imgtype)
s.close()

Vielleicht hilft's ja jemandem und sei es, indem es das Interesse für Python weckt ;-)

Cannonau

Uranjitsu
20.02.2017, 15:26
Ich habe das mal hier mit aufgenommen: https://www.szenebox.org/29-entwicklung-programmierung/5646-codeschnipsel-linkcrypter-image-hoster-api-funktionen/#post31589