質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2844閲覧

Googleフォト(Picasa API?)にPHPでアップロードの方法

fugavc

総合スコア14

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/06/16 12:07

外部のフリーサイトの画像をPHPで自身のWPサーバーにアップロードするコードになっていますがこれをGoogleフォト(Picasa API?)へPHPで直接アップロードしたいのですが調べてのいまいちヒットしません。
ライブラリやスクリプト等の使用も出来ますので、詳しい方、教えていただけると幸いです。
下記のコードは、if構文で画像の拡張子を含むurlをサイトのソースから探すようにしています。
もし見つかった場合は、ファイル名等をプログラムしwpサーバにアップロードするようにしています。

PHP

1 if (preg_match('/.(jpg|png|PNG|jpeg|JPG|gif)$/', $node->nodeValue)) { 2 $upload_dir = wp_upload_dir(); 3 $arr = explode('.', $ank); 4 $ext = end($arr); 5 $filename = date('Ymdhis'); 6 static $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJLKMNOPQRSTUVWXYZ0123456789'; 7 8 $str = ''; 9 for ($i = 0; $i < 1; ++$i) { 10 $str .= $chars[mt_rand(0, 61)]; 11 } 12 $img_save = $upload_dir['baseurl'] . "/" . $filename . $str . "." . $ext; 13 $srcpath = $upload_dir['basedir'] . "/" . $filename . $str . "." . $ext; 14 $filename35 = basename($srcpath); 15 $filename35 = basename($srcpath); 16 $upload_file35 = wp_upload_bits($filename35, null, file_get_contents($ank)); 17 $wp_filetype35 = wp_check_filetype($filename35, null); 18 $upload_file35['file']; 19 $attachment = array( 20 'guid' => $upload_dir['url'] . '/' . basename( $filename35 ), 21 'post_mime_type' => $wp_filetype35['type'], 22 'post_title' => preg_replace('/.[^.]+$/', '', $filename35), 23 'post_content' => '', 24 'post_status' => 'inherit' 25 ); 26 $attach_id = wp_insert_attachment( $attachment, $upload_file35['file'], 0 ); 27 if($attach_id) { 28 require_once(ABSPATH . "wp-admin" . '/includes/image.php'); 29 30 $attach_data = wp_generate_attachment_metadata( $attach_id, $upload_file35['file'] ); 31 wp_update_attachment_metadata( $attach_id, $attach_data ); 32 } 33 global $src; 34 35 global $alin; 36 37 $src = $upload_dir['url'] . "/" . $filename . $str . "." . $ext; 38 $node->setAttribute('href', $src); 39 $img = $dom->createElement('img'); 40 $img->setAttribute('src', $src); 41 $node->nodeValue = null; 42 $node->appendChild($img); 43 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Google Photos APIの登場が先月だから情報はほとんどない。

Laravel用は作った。
https://github.com/kawax/laravel-google-photos

その他PHPならこれを使えばいいだけのことだけど
https://github.com/google/google-api-php-client
まずGoogle APIを使えるようにするまでにも罠が多い。
こんな所では書ききれないので他のGoogle APIの使い方の情報を調べて
Google_Clientを作れる所まで行ければ

php

1$photos = new Google_Service_PhotosLibrary($client);

Photosサービスを作って$photos->mediaItems->batchCreate()と使えるようになる。
https://github.com/google/google-api-php-client-services/tree/master/src/Google/Service/PhotosLibrary

肝心のアップロード部分はここにないけど。エンドポイントへのPOSTだけなのでGoogle_ClientからGuzzleを得てPOST。

php

1$endpoint = 'https://photoslibrary.googleapis.com/v1/uploads'; 2$guzzle = $client->authorize(); 3$response = $guzzle->post($endpoint, [ 4 'headers' => [ 5 'Content-type' => 'application/octet-stream', 6 'X-Goog-Upload-File-Name' => $name, 7 ], 8 'body' => $file, 9 ]); 10 11$uploadToken = $response->getBody();

まだuploadTokenが返ってきただけ。
Photosライブラリに追加するにはbatchCreate()を使う。
クラス3つほど使ってbatchCreateのためのリクエストを準備。
Google_Service_PhotosLibrary_SimpleMediaItem
Google_Service_PhotosLibrary_NewMediaItem
Google_Service_PhotosLibrary_BatchCreateMediaItemsRequest
なんでこんな仕様なんだろうってほど面倒。

この回答だけでは全く足りないので自分で色々やってみるしかない。

投稿2018/06/16 13:31

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fugavc

2018/06/17 14:20

ご回答ありがとうございます。 よろしければ、詳しくコードを教えていただけないでしょうか?
guest

0

こちらの記事に Google Photos の新しい API の使い方が紹介されてますが、世に出たばかりの API なので PHP のラッパーライブラリは無いと思います。

投稿2018/06/16 12:52

yhg

総合スコア2161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問