4images Forum & Community

General / Allgemeines => Programming => Topic started by: .Infecto on November 06, 2014, 08:49:24 PM

Title: Übergabe von Containerlinks (Name)
Post by: .Infecto on November 06, 2014, 08:49:24 PM
Hallo zusammen,

da ich komplette Bilderpakete angebe, habe ich versucht mittels der Bildereinstellung direkt die Container anzugeben und den Bildername direkt mit dem Name des Containers zu überschreiben.

Ich habe folgendes getan.

Ich habe in der admin/images.php eingetragen unter:
                    if (!empty($additional_image_fields)) {
                        $table_fields = $site_db->get_table_fields(IMAGES_TABLE);
                        foreach ($additional_image_fields as $key => $val) {
                            
                            if (isset($HTTP_POST_VARS[$key.'_'.$i]) && isset($table_fields[$key])) {
                                $additional_field_sql .= ", $key";
                                $additional_value_sql .= ", '".un_htmlspecialchars(trim($HTTP_POST_VARS[$key.'_'.$i]))."'";
                            }

                        }

                    }

Das hier:
                    // Sharelinkz START
                    $sharelinksdl = str_replace('http://share-links.biz/_', '', $image_download_url);
                    $re1='.*?'; # Non-greedy match on filler
                    $re2='('.$sharelinksdl.')'; # Alphanum 1
if (preg_match_all ("/".$re1.$re2."/is", $image_download_url)) {
                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, "http://share-links.biz/api/status");
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_POST, 1);
                    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
                    $data = array(    
'apikey' => '2ed183155346a56a',      // Der API-Key, den man als reg. User bekommt
                    'folderCodes' => $sharelinksdl,   // Code des Ordners (bspw. "_xxkhv4aw7s5qa")
                    );
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                    $rueckgabe = explode(';', curl_exec($ch));
                    curl_close($ch);
                    $sl_name = $rueckgabe[1];
   } else {
$sl_name = $image_name;
}
// Sharelinkz ENDE

Und $image_name mit $sl_name ausgetauscht:
                    $sql = "INSERT INTO ".IMAGES_TABLE."
                (cat_id, user_id, image_name, image_description, image_keywords, image_date, image_active, image_media_file, image_thumb_file, image_download_url, image_allow_comments".$additional_field_sql.")
                VALUES
                ($cat_id, $user_id, '$sl_name', '$image_description', '$image_keywords', $current_time, $image_active, '$new_name', '$new_thumb_name', '$image_download_url', $image_allow_comments".$additional_value_sql.")";

Das klappt auch wunderbar. Da ich aber verschiedene Container-Dienste nutze, habe ich noch folgendes hinzugefügt:

                    $ncdl = str_replace('http://ncrypt.in/folder-', '', $image_download_url);
                    $re1x='.*?'; # Non-greedy match on filler
                    $re2x='('.$ncdl.')'; # Alphanum 1
if (preg_match_all ("/".$re1x.$re2x."/is", $image_download_url)) {
curl_setopt($ch, CURLOPT_URL, "http://ncrypt.in/api_status.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$data = array(
    'link' => 'http://ncrypt.in/folder-'.$ncdl,
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$rueckgabe = explode(';', curl_exec($ch));
curl_close($ch);
 
                    $sl_name = $rueckgabe[4];
   } else {
$sl_name = $image_name;
}

Jetzt übergibt er den Name nicht mehr. Ich muss mich entscheiden ob ich NCrypt oder Share-Linkz nutze.
Ich möchte erreichen, dass das System automatisch erkennt ob es sich um share-linkz oder ncrypt handelt.
Der Dontainerlink wird als
$image_download_url = trim($HTTP_POST_VARS['image_download_url_'.$i]);
Genutzt.

Kann mir jemand helfen?
Title: Re: Übergabe von Containerlinks (Name)
Post by: Rembrandt on November 07, 2014, 07:52:06 AM
Hi!

Soviel ich jetzt verstanden habe möchtest du, eine Download URL (im Upload Formular) als Bildnamen verwenden (den jeweiligen *zip Namen)?

Du könntest auch mit preg_match (http://php.net/manual/de/function.preg-match.php) zuerst herausfinden ob in der Var "$image_download_url" das Wort "NCrypt" oder "Share-Linkz" enthalten ist und dann erst  zu einen deiner beiden Script
weiterleiten.

mfg Andi
Title: Re: Übergabe von Containerlinks (Name)
Post by: .Infecto on November 07, 2014, 12:56:05 PM
Das tuhe ich doch bereits oder?
Nur irgendwie beist sich die if-abfrage.

Wenn ich nur ein Script laufen lasse, dann übernimmt er die Daten, lasse sich beide ablaufen, spruckt er mir preg_mach fehler aus.
Als if-Abfrage, nutze ich das
if (preg_match_all ("/".$re1x.$re2x."/is", $image_download_url)) {
Title: Re: Übergabe von Containerlinks (Name)
Post by: Rembrandt on November 07, 2014, 01:17:04 PM
Also noch mal meine Frage, eine Download URL (im Upload Formular) als Bildnamen verwenden (den jeweiligen *zip Namen)?
Title: Re: Übergabe von Containerlinks (Name)
Post by: .Infecto on November 07, 2014, 01:40:32 PM
So ähnlich.

Es geht um den Ordnername: http://share-links.biz/_qu55men1z4bm
Anhand der API (Siehe Script)
API
(http://abload.de/img/fireshotscreencapturec9oyh.png)

Script
                    // Sharelinkz START
                    $sharelinksdl = str_replace('http://share-links.biz/_', '', $image_download_url);
                    $re1='.*?'; # Non-greedy match on filler
                    $re2='('.$sharelinksdl.')'; # Alphanum 1
if ($image_download_url == 'http://share-links.biz/_'.$sharelinksdl.')') {
                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, "http://share-links.biz/api/status");
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_POST, 1);
                    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
                    $data = array(    
'apikey' => '2ed183155346a56a',      // Der API-Key, den man als reg. User bekommt
                    'folderCodes' => $sharelinksdl,   // Code des Ordners (bspw. "_xxkhv4aw7s5qa")
                    );
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                    $rueckgabe = explode(';', curl_exec($ch));
                    curl_close($ch);
                    $sl_name = $rueckgabe[1];
   } else {
$sl_name = $image_name;
   }
// Sharelinkz ENDE

NCrypt ist ähnlich augebaut. Nur 4images soll das erkennen ob es sich um ncrypt oder share-linkz handelt und entsprechend das richtige Script nutzen.

EDIT:
Mit dieser Variante scheint es bisher zu funktionieren. Aber ist das Codetechnisch ok?
                    // Sharelinkz START
                    $sharelinksdl = str_replace('http://share-links.biz/_', '', $image_download_url);
if ($image_download_url == 'http://share-links.biz/_'.$sharelinksdl.'') {
                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, "http://share-links.biz/api/status");
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_POST, 1);
                    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
                    $data = array(   
'apikey' => '2ed183155346a56a',      // Der API-Key, den man als reg. User bekommt
                    'folderCodes' => $sharelinksdl,   // Code des Ordners (bspw. "_xxkhv4aw7s5qa")
                    );
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                    $rueckgabe = explode(';', curl_exec($ch));
                    curl_close($ch);
                    $sl_name = $rueckgabe[1];
echo "Kuchen";
    }
// Sharelinkz ENDE

                    $ncdl = str_replace('http://ncrypt.in/folder-', '', $image_download_url);
if ($image_download_url == 'http://ncrypt.in/folder-'.$ncdl.'') {
$chx = curl_init();
curl_setopt($chx, CURLOPT_URL, "http://ncrypt.in/api_status.php");
curl_setopt($chx, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chx, CURLOPT_POST, 1);
curl_setopt($chx, CURLOPT_FOLLOWLOCATION, 1);
$datax = array(
    'link' => 'http://ncrypt.in/folder-'.$ncdl,
);
curl_setopt($chx, CURLOPT_POSTFIELDS, $datax);
$rueckgabex = explode(';', curl_exec($chx));
curl_close($chx);
 
                    $sl_name = $rueckgabex[4];
echo "Torte";
    }
Title: Re: Übergabe von Containerlinks (Name)
Post by: Rembrandt on November 10, 2014, 07:16:19 PM
Hi!

So ich habe einmal was zusammen gestellt, vorweg es gibt natürlich mehrere Möglichkeiten um ans Ziel zu kommen.
Der Code sieht im ersten Moment aufwendiger aus, hat aber den Vorteil wenn du einen weiteren Anbieter nutzen möchtest kannst du in der "function shareLink"  ganz einfach ein weiteres "case" anlegen.

1.) die beiden functionen in die Datei "includes/functions.php" vor "?>" hinein kopieren.

function curlSharelink($shareLinkUrl, $shareLinkArray, $shareLinkReturn){
  $cInit = curl_init();
  curl_setopt($cInit, CURLOPT_URL, $shareLinkUrl);
  curl_setopt($cInit, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($cInit, CURLOPT_POST, 1);
  curl_setopt($cInit, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($cInit, CURLOPT_POSTFIELDS, $shareLinkArray);
  $downloadName = explode(';', curl_exec($cInit));
  curl_close($cInit);
  return $downloadName[$shareLinkReturn];
}

function shareLink($shareLinkUrl, $image_name=''){
  if($shareLinkUrl){
    $shareLink = parse_url($shareLinkUrl, PHP_URL_HOST);

    switch ($shareLink) {
      case ($shareLink == "share-links.biz") :
        $folderCodes = str_replace('http://share-links.biz/_', '', $shareLinkUrl);  
        $shareLinkArray = array(    
          'apikey' => '2ed183155346a56a',
          'folderCodes' => $folderCodes
        );
        $shareLinkReturn = 1;
      return curlSharelink($shareLinkUrl, $shareLinkArray, $shareLinkReturn);
      break;
      
      case ($shareLink == "ncrypt.in") :
        $shareLinkArray = array(
          'link' => $shareLinkUrl
        );
        $shareLinkReturn = 4;
      return curlSharelink($shareLinkUrl, $shareLinkArray, $shareLinkReturn);
      break;
      
      default:
      return $image_name;
      break;
    }
  }
  else{
    return $image_name;
  }
}


2.)  suche in der member.php in der section "($action == "uploadimage")":

$upload_cat = ($direct_upload) ? $cat_id : 0;

und füge darunter ein:

$image_name = shareLink($remote_media_file,$image_name);


Testen konnte ich es nicht, da ich auf diesen Seiten keinen Zugang habe.
Aber ich nehme mal an das wenn du dir den Code der beiden "functionen" ansiehst wirst du ihn verstehen und gegeben falls korrigieren können.

mfg Andi
Title: Re: Übergabe von Containerlinks (Name)
Post by: .Infecto on November 11, 2014, 03:43:34 PM
Vielen vielen Dank.
Das werde ich die Tage testen und melde mich mit einem Feedback zurück!
Title: Re: Übergabe von Containerlinks (Name)
Post by: Rembrandt on November 11, 2014, 05:02:43 PM
Na da bin ich schon gespannt ob es funktioniert .  :)
Title: Re: Übergabe von Containerlinks (Name)
Post by: .Infecto on November 12, 2014, 01:17:32 AM
Das denke ich mir.
Bisher habe ich das so gelöst, einwandfrei.

                $sldl = str_replace(SHARELINKZBIZ_FOLDERKEY, '', $image_download_url);
               
                if ($image_download_url == SHARELINKZBIZ_FOLDERKEY . $sldl . '') {
                    $sl_curl = curl_init();
                    curl_setopt($sl_curl, CURLOPT_URL, SHARELINKZBIZ);
                    curl_setopt($sl_curl, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($sl_curl, CURLOPT_POST, 1);
                    curl_setopt($sl_curl, CURLOPT_FOLLOWLOCATION, 1);
                    $array = array(
                        'apikey' => 'xxx',
                        'folderCode' => $sldl
                    );
                    curl_setopt($sl_curl, CURLOPT_POSTFIELDS, $array);
                    $sl_echo = explode(';', curl_exec($sl_curl));
                    curl_close($sl_curl);
                    if ($config['container_name'] == 0) {
                        $image_filesize = byte_umrechner($sl_echo[2]);
                        $image_provider = $sl_echo[3];
                    } else {
                        $sls_curl = curl_init();
                        curl_setopt($sls_curl, CURLOPT_URL, SHARELINKZBIZ_STATS);
                        curl_setopt($sls_curl, CURLOPT_RETURNTRANSFER, 1);
                        curl_setopt($sls_curl, CURLOPT_POST, 1);
                        curl_setopt($sls_curl, CURLOPT_FOLLOWLOCATION, 1);
                        $arrays = array(
                            'apikey' => 'xxx',
                            'folderCodes' => $sldl
                        );
                        curl_setopt($sls_curl, CURLOPT_POSTFIELDS, $arrays);
                        $sls_echo = explode(';', curl_exec($sls_curl));
                        curl_close($sls_curl);
                        $image_name     = $sls_echo[1];
                        $image_filesize = byte_umrechner($sl_echo[2]);
                        $image_provider = $sl_echo[3];
                    }
                }
               
                $ncdl = str_replace(NCRYPTIN_FOLDERKEY, '', $image_download_url);
               
                if ($image_download_url == NCRYPTIN_FOLDERKEY . $ncdl . '') {
                    $nc_curl = curl_init();
                    curl_setopt($nc_curl, CURLOPT_URL, NCRYPTIN);
                    curl_setopt($nc_curl, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($nc_curl, CURLOPT_POST, 1);
                    curl_setopt($nc_curl, CURLOPT_FOLLOWLOCATION, 1);
                    $array = array(
                        'link' => NCRYPTIN_FOLDERKEY . $ncdl
                    );
                    curl_setopt($nc_curl, CURLOPT_POSTFIELDS, $array);
                    $nc_echo = explode(';', curl_exec($nc_curl));
                    curl_close($nc_curl);
                    if ($config['container_name'] == 0) {
                        $image_filesize = byte_umrechner($nc_echo[2]);
                        $image_provider = $nc_echo[1];
                    } else {
                        $image_filesize = byte_umrechner($nc_echo[2]);
                        $image_provider = $nc_echo[1];
                        $image_name     = $nc_echo[4];
                    }
                }
               
                $lcdl = str_replace(LINKCRYPTWS_FOLDERKEY, '', $image_download_url);
               
                if ($image_download_url == LINKCRYPTWS_FOLDERKEY . $lcdl . '') {
                    $returnData = file_get_contents(LINKCRYPTWS . $lcdl);
                   
                    if (!$returnData or !$returnData = @simplexml_load_string($returnData)) {
                        echo "Keine Daten empfangen!";
                    } else {
                        $image_filesize = $returnData->folderSize . ' MB';
                        $image_provider = $returnData->folderHoster;
                        if ($config['container_name'] == 1) {
                        }
                        $image_name = $image_name;
                    }
                }

Aber wie gesagt, deine Variante werde ich mir in jedem Fall anschauen.
Um selber dein Script zu testen, brauchst du im Grunde keine Zugangsdaten.
Bis auf Share-Linkz, ist die Abfrage der Daten ohne APIKey möglich.
Für Share-Linkz kann ich dir einen zum testen geben.
Für die anderen, reicht lediglich ein Ordnerlink.
Title: Re: Übergabe von Containerlinks (Name)
Post by: Rembrandt on November 12, 2014, 05:12:48 AM
...
Für Share-Linkz kann ich dir einen zum testen geben.
Für die anderen, reicht lediglich ein Ordnerlink.
Ah ok, kannst du mir die beiden Links per PM zukommen lassen?

mfg Andi