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-Key: 209077

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

Printed on: April 27, 2024 at 05:04 o'clock

Member: Herbrich19
Herbrich19 Jul 03, 2013 at 23:35:28 (UTC)
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
Member: Arano
Arano Jul 04, 2013 at 02:24:07 (UTC)
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)
Member: peterha
peterha Jul 04, 2013 at 06:24:27 (UTC)
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.
Member: nxclass
nxclass Jul 04, 2013 at 09:09:05 (UTC)
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
Member: colinardo
colinardo Jul 04, 2013 updated at 09:33:51 (UTC)
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
Member: Herbrich19
Herbrich19 Jul 04, 2013 at 16:32:13 (UTC)
Goto Top
Hallo, giebt es da zufällig auch ne ASP.NET Lösung für Dropbox??

LG, Herbrich
Member: colinardo
colinardo Jul 05, 2013 updated at 08:05:41 (UTC)
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
Member: Herbrich19
Herbrich19 Jul 05, 2013 at 07:59:42 (UTC)
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
Member: colinardo
colinardo Jul 05, 2013 at 08:01:48 (UTC)
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ß