peterha
Goto Top

Mit PHP eine (https) dropbox-Freigabe auslesen

Hallo liebe Gemeinde,
hallo Timo Beil,

ich habe eine Frage die wohl einfach zu beantworten ist.

Ich habe ein PHP-script am Laufen, das Bilder aus einem Verzeichnis (www.d@u.de/verzeichnis) darstellt. Funktioniert alles ok.

Jetzt woran ich gescheitert bin:

Ich möchte das Verzeichnis aus dem die Bilder ausgelesen werden umstellen auf eine Dropbox-Freigabe (https://www.dropbox.com/sh/fsdlifu484ls3jf8slf/skdjfllsdksdfsdfsdfsdf) - ja der Link ist hier in diesem Beispiel ungültig)


Hier der akuelle - nicht - funktionierende Code, bei dem ich (in meiner Blauäugigkeit) einfach den Originaleintrag "images" (der ein Ordner also www.d@u.de/images ist) abgeändert in den Dropboxlink.

<div id="galerie">  
	<?php
    $ordner = "https://www.dropbox.com/sh/fsdlifu484ls3jf8slf/skdjfllsdksdfsdfsdfsdf";  
    $allebilder = scandir($ordner);

Meine Frage ist nun wie ich den Code anpassen muss, dass er die Bilder die in der Dropboxgalerie sind anzeigt also drauf zugreifen kann.

Vielen Dank für Ideen und Tipps.

Peter

Content-ID: 209077

Url: https://administrator.de/contentid/209077

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

Herbrich19
Herbrich19 04.07.2013 um 01:35:28 Uhr
Goto Top
Hallo,

Ich kann dir zwar die Frage leider nicht beandworten, aber ich habe einen kleinen denkansatz. Screencrapping z.B., oder aber die Dropbox als XML zu laden und dann auszulesen. Mann kann aber auch einfach (Stichwort Screencrapping) mit Regex die Elemente mit den Bildern Raussuchen lassen und so einfach dass abfragen was man braucht. Die Billder kommen dann in eine Liste und daraus machst du dann die Gallerie. Sry aber ich habe es nicht so mit PHP, ich komme ehr aus der ASP.NET ecke.

LG, Herbrich
Arano
Arano 04.07.2013 um 04:24:07 Uhr
Goto Top
Moin,

also so einfach wie mit einem echtem Verzeichnis geht das nicht !
Immerhin muss man sich ja auch irgendwie authentifizieren, sonst hätte ja jeder Zugriff Oo

https://www.dropbox.com/developers/core/start/php


~Arano
(Ich besitze keine DropBox oder ähnliches)
peterha
peterha 04.07.2013 um 08:24:27 Uhr
Goto Top
Hi danke für die Meldungen. @Arano doch der link reicht. Es ist ein Freigabe bei der im link die authentication bei ist. Das ist ja eine praktische Sache der dropbox. (Bei g drive bräuchte der zugreifende einen g Account) bei dropbox reicht es diesen link zu haben und man kann drauf zugreifen.
nxclass
nxclass 04.07.2013 um 11:09:05 Uhr
Goto Top
...mit scandir() wirst du nicht weit kommen - schau mal: http://php.net/manual/en/function.file-get-contents.php oder http://php.net/manual/en/book.curl.php
colinardo
colinardo 04.07.2013 aktualisiert um 11:33:51 Uhr
Goto Top
Hallo Peter,
hab mir so eine Dropbox-Seite mal näher angeschaut und dir folgendes gebaut:
(den Link zu deiner Dropbox-Seite gibst du in der Variablen $urlDropBox an.)
function fread_url($url,$ref="")  
  {
	if(function_exists("curl_init")){  
		$ch = curl_init($url);
		$user_agent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";  
		curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
		curl_setopt( $ch, CURLOPT_HTTPGET, 1 );
		curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
		curl_setopt( $ch, CURLOPT_FOLLOWLOCATION , 1 );
		curl_setopt( $ch, CURLOPT_REFERER, $ref );
		$html = curl_exec($ch);
		curl_close($ch);
	}
	else{
		$hfile = fopen($url,"r");  
		if($hfile){
			while(!feof($hfile)){
				$html.=fgets($hfile,1024);
			}
		}
	}
	return $html;
}
  
  $urlDropBox = "https://www.dropbox.com/sh/xxxxxxxxxxxxxxxxxxxxx";  
  $sHTML = fread_url($urlDropBox);
  preg_match_all('/<a href=\"([^"]*)\"[^>]*><img data-src=\"([^"]*)\" data-fail-src=\"[^"]*\"/',$sHTML,$matches);  
  for ($i=0;$i<count($matches[1]); $i++){
	echo '<p><a href="'.$matches[1][$i].'"><img src="'.$matches[2][$i].'" ></a></p>>';  
  }
Die erste Function ist nur dazu da sich den kompletten HTML-Content der Seite zu holen. Ich weiß es gibt dafür in PHP extra Funktionen aber diese sind bei vielen Hostern aus Sicherheitsgründen nicht verwendbar; deshalb die Function mit CURL die bei den meisten Hosting-Paketen funktioniert.
Das Script extrahiert die URLs der Vorschaubilder(via RegEx) von der Seite und verlinkt dann die Bilder mit der Dropbox-Seite auf dem man das Original-Bild ansehen kann.
Um aus der ersten Seite das Original-Bild in voller Größe zu erhalten müsste man dazu dem Link zu jedem Bild folgen da man das Original-Bild erst dort extrahieren kann.

Denke das sollte dich deinem Vorhaben einen Schritt weiter bringen...

Grüße Uwe
gelöste Beitrage bitte auch als solche markieren.Danke
Herbrich19
Herbrich19 04.07.2013 um 18:32:13 Uhr
Goto Top
Hallo, giebt es da zufällig auch ne ASP.NET Lösung für Dropbox??

LG, Herbrich
colinardo
colinardo 05.07.2013 aktualisiert um 10:05:41 Uhr
Goto Top
Zitat von @Herbrich19:
Hallo, giebt es da zufällig auch ne ASP.NET Lösung für Dropbox??

back-to-topBeispiel mit ASP.NET
(Zeile3 noch die URL zur Dropbox-Seite mit den Bildern eintragen)
   Public allImages As String
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim urls As Collection = getDropBoxImages("[URL ZUR DROPBOXSEITE MIT DEN BILDERN]")  
        For Each url In urls
            allImages &= "<div style=""float:left; margin:5px""><a href=""" & url(1) & """><img src=""" & url(0) & """></a></div>"  
        Next

    End Sub

    'Returns Urls of DropBox-Images as a Collection  
    Public Function getDropBoxImages(ByVal strURL As String) As Collection
        Dim shtml As String = New System.Net.WebClient().DownloadString(strURL)
        Dim matches As RegularExpressions.MatchCollection = New RegularExpressions.Regex("<a href=\""([^""]*)\""[^>]*><img data-src=\""([^""]*)\"" data-fail-src=\""[^""]*\""").Matches(shtml)  
        If matches.Count > 0 Then
            Dim urls As New Collection
            Dim counter As Int32 = 0
            For Each m As RegularExpressions.Match In matches
                counter += 1
                urls.Add({m.Groups(2).Value, m.Groups(1).Value}, counter)
            Next
            Return urls
        else
            Return Nothing
        End If
        
    End Function
in eine Seite baust du dann folgenden String ein:
<%= allImages%>
Grüße Uwe
gelöste Beitrage bitte auch als solche markieren.Danke
Herbrich19
Herbrich19 05.07.2013 um 09:59:42 Uhr
Goto Top
Hallo,

Hey echt vielen Dank. Hat der Script ein © oder darf man ihn umbauen?? Den ich würde dann die URL nicht eintragen sondern eine Altanative Methode Nutzen, also eine Zweite Funktion machen die dann endweder auf eine DB zugreift, ein Postback, ein Get Parameter nutzt oder ein Steuerelement (wie TextBox o.ä,) Abfragt.

Aber echt vielen Dank für den Script.

LG, Herbrich
colinardo
colinardo 05.07.2013 um 10:01:48 Uhr
Goto Top
Zitat von @Herbrich19:
Hallo,

Hey echt vielen Dank. Hat der Script ein © oder darf man ihn umbauen??
kannst du verwenden wie du willst, ist von mir ...Viel Spaß