Smugmug загрузка изображений API v2 с использованием PHP и Curl

1

Я пытаюсь загрузить изображение в Smugmug с помощью API загрузки. Я давно пытаюсь, но это не сработает. Это то, к чему я придумал.

Когда я запускаю сценарий, ответ выглядит следующим образом:

HTTP/1.1 100 Continue HTTP/1.1 200 OK Cache-Control: private, no-store, no-cache, max-age=1, must-revalidate Content-Type: text/xml; charset=utf-8 Date: Tue, 07 Jul 2015 14:18:50 GMT Edge-Control: no-store Expires: Tue, 07 Jul 2015 14:18:50 GMT Server: nginx X-Powered-By: SmugMug/1.0 X-SmugMug-Hiring: How to love what you do: http://www.smugmug.com/jobs/ X-SmugMug-Values: 1/4 - Thrill your customers Content-Length: 38 Connection: keep-alive

Но файл не загружен. Вы видите что-то не так с кодом?

    include_once("oauth/OAuth.php");
    include_once("constants.php");

    $access_token = '***';
    $access_token_secret = '***';

    $consumer = new OAuthConsumer(API_KEY, API_KEY_SECRET);
    $signature_method = new OAuthSignatureMethod_PLAINTEXT;

    $token = new OAuthToken($access_token, $access_token_secret);

    $req_token = OAuthRequest::from_consumer_and_token($consumer, $token, "POST", 'http://upload.smugmug.com');
    $req_token->sign_request($signature_method, $consumer, $token);
    $parameters = $req_token->get_parameters();

    $path = 'image.png';
    $type = pathinfo($path, PATHINFO_EXTENSION);
    $data = file_get_contents($path);
    $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);

    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $path);
    finfo_close($finfo);


    $header[] = 'Authorization: OAuth realm="http://upload.smugmug.com/",
                 oauth_consumer_key='.$parameters['oauth_consumer_key'].',
                 oauth_token='.$parameters['oauth_token'].',
                 oauth_signature_method='.$parameters['oauth_signature_method'].',
                 oauth_signature='.$parameters['oauth_signature'].',
                 oauth_timestamp='.time().',
                 oauth_nonce='.md5(time() . mt_rand()).',
                 oauth_version=1.0';

    $body[] = 'Accept: application/json';
    $body[] = 'X-Smug-Version: v2';
    $body[] = 'X-Smug-ResponseType: JSON';
    $body[] = 'X-Smug-AlbumUri: /api/v2/album/******';
    $body[] = 'X-Smug-Filename: image.png';
    $body[] = 'Content-MD5: '.$base64.'';
    $body[] = 'Content-Length: '.filesize($path).'';
    $body[] = 'Content-Type: '.$mime.'';




    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_HEADER, 1);    
    curl_setopt($ch, CURLOPT_URL, 'http://upload.smugmug.com/');    
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body); 
    curl_error ($ch);



    $result = curl_exec($ch);

    print_r($result);
Теги:
curl
upload

1 ответ

0

Использование OAuth может быть сложным, и API загрузки для SmugMug немного уникален. Возможно, было бы полезно использовать одну из оболочек PHP, а не писать собственный код. Вот два, оба из которых имеют примеры загрузки изображений:

1.) phpSmug

2.) DFM Smug Wrapper

Например, с помощью DFM Smug Wrapper вы можете сделать следующее (скопированное из файла README, включенного в оболочку):

<?php
require_once("dfm-smug-wrapper/dfm-smug-wrapper.php");
$f = new DFM_Smug(
       "oauth_consumer_key=12345678",
       "oauth_secret=some_secret",
       "token_id=12345",
       "token_secret=some_other_secret",
       "app_name=My Cool App/1.0 (http://app.com)",
       "api_ver=2.0"
  );
$f->images_upload("AlbumID=123456", "File=/path/to/image.jpg");
?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню