質問: 毎日の写真ブログを自動化する 誰かが私が以下を合理化できる最善の方法についていくつかの提案をしてくれるかどうか疑問に思いました。私は毎日アップロードしているwordpressブログ(私的にホストされている)を持っています(よく、通常は一度に大量のアップデートをスケジュールします)。アップロードしてタグを付け、非常に簡単なコメントを書きます。私はもともと私が画像をftp転送できるサーバー上のフォルダーを検討していたので、毎日そこに見えるようなものを書いてその写真に基づいて投稿を作成するつもりでした。それ。任意の助けは大歓迎です。p.s私はこれをコミュニティウィキにするつもりですが(正解は言うまでもなく1つの答えさえあるとは思いませんので)、私はまだ十分な権限を持っていません!
回答: 毎日の写真ブログを達成する方法はたくさんありますがありますので、どのようにアプローチするかをお伝えします。wordpressでフォトブログを設定したい場合は、 flickr アカウントで開始し、それを活用します何らかの理由でflickrが好きではありません photobucket 、 smugmug 、 picasa または one その他 flickr 代替 。)flickrを使用するflickrでは are bulk ploading - tools 多数の写真を管理するための多くのツール を含む多くの写真を簡単にアップロードできるようにします。flickr自体には 写真ブログをサポートする組み込みツール email-to-blog が含まれています。また、既存のツールではflickrで十分な制御ができない場合は、統合および自動化するphpスクリプトをいつでも記述できます。方法を示す多くのブログ投稿があります(また、以下にその作成方法も示します): phpおよびflickr apiを使用して写真を検索 flickr api fun シリアル化php応答フォーマット flickr apiを使用してフォトギャラリーを作成する方法 flickr photo streamsとphpの統合 5 flickr apiとphp入門のレッスン そして、少なくともいくつかのphpライブラリは、flickr apiへのアクセスを簡素化します。 phpflickr php用meme flickr apiライブラリの笑い flickr apiを探索するそれでは、flickrにアップロードされたファイルを使用してwordpressに簡単な写真ブログを作成したいとしましょう。最初のステップはapiキーを取得するです。 flickr app garden-アプリの作成 あなたがそれにいる間、あなたはapiドキュメントをスキャンしたいかもしれません: flickr apiドキュメント 現在、apiを介してflickrにクエリを実行するさまざまな方法があります。 写真セットのクエリ で説明しますが、 タグで検索 を検討することもできます。最初の例では、というタイトルのflickr写真セットを使用します。 " barber motorcycle museum-2006年10月21〜22日 "(人々が気に入っているようだから使用しています。多くのトラフィックを取得します。)urlで見つけることができるphotoset_idを取得する必要があります。 (ソース: mikeschinkel.com )次に、次の形式のurlを使用してflickr apiのflickr.photosets.getphotosメソッドを呼び出す必要があります。http://api.flickr.com/services/rest/?method=flickr.photosets.getphotos&api_key={your_api_key_goes_here}&photoset_id=72157594340403773&media=photos&format=json&nojsoncallback=1 注意 {your_api_key_goes_here}を独自のapiキーに置き換えると、実際にブラウザから呼び出すことができ、次のようになります。 (ソース: mikeschinkel.com )また、 json を要求することに注意してください。format=json&nojsoncallback=1 urlパラメーターを使用して戻ります。xmlよりもjsonを処理する方がはるかに簡単で、nojsoncallbackname__は必要に応じてコールバックを省略しますjavascriptでの作業。返されるのは写真のリストを含むネストされたデータ構造であり、写真ごとに次の属性を持つオブジェクトを取得します(以下に示すもの)標準のphpprint_r() function):によって生成された写真の配列の最初の要素の出力[0] => stdclass object ( [id] => 276672853 [secret] => 099eaa1af2 [server] => 107 [farm] => 1 [title] => barber motorcycle museum - oct 22 2006 (500) [isprimary] => 0 ) flickrの写真url形式これで、次に必要な最近の写真のリストができましたflickrの写真のurl形式を理解するをご覧ください。 flickrの写真ソースurl 一般に、flickrの写真のurlは次のようになります。500pxワイドまたはハイ「標準」写真: http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}.jpg このバージョンは、最長辺が500ピクセルになります。元の画像: http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{o-secret}_o.(jpg|gif|png) これは、アップロードされたものであれば何でもかまいません。jpg、.gif、または.png。特定のサイズのバージョン:これらは常に.jpgです。 http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[size].jpg [size]は次のいずれかです。 s-小さな正方形75x75 t-サムネイル、最長辺100 m-小さい、最長辺が240 z-中、最長辺が640 b-大きい、最長側で1024(非常に大きな元の画像にのみ存在) したがって、上記の結果の例から取られた次のurlは、後続の写真を取得します(.jpgの前のzname__が最長サイズで幅640ピクセルの写真を示していることに注意してください:) https://farm1.static.flickr.com/107/276672853_099eaa1af2_z.jpg 上記のすべての情報を用意して、wordpressのwp_httpクラスを使用してセットから写真を取得するphpスクリプトを作成できるようになりました。私はあなたのウェブサイトのルートにコピーできるシンプルなスクリプトを書きました。それを実行する前に必ずあなた自身のapi_keyとphotoset_idに置き換えてください:include "wp-load.php"; define('flickr_api_key','{your_api_key_goes_here}'); define('flickr_get_url','http://api.flickr.com/services/rest/'); define('photo_size_char', 's'); // s = 75x75 pixels on longest side $result = flickr_get(array( 'method' => 'flickr.photosets.getphotos', 'photoset_id' => '{your_photoset_id_goes_here}', 'media' => 'photos' )); if (isset($result['body']->photoset->photo)) { $size = photo_size_char; foreach($result['body']->photoset->photo as $photo) { extract((array)$photo); $url = "http://farm{$farm}.static.flickr.com/{$server}/{$id}_{$secret}_{$size}.jpg"; echo "<img src=\"{$url}\" alt=\"{$title}\" />\n"; } } function flickr_get($params,$args=array()) { $http = new wp_http(); $params['api_key'] = flickr_api_key; $params['format'] = 'json'; $params['nojsoncallback'] = 1; $params = http_build_query($params); $url = flickr_get_url . "?{$params}"; $result = $http->get($url,$args); if (isset($result['response']['code']) && $result['response']['code'] == 200) $result['body'] = json_decode($result['body']); else $result = false; return $result; } apiキーとphotoset idで上記を使用すると、次の結果が得られます。 (ソース: mikeschinkel.com )flickr photoset写真をブログに投稿するためのphpスクリプトblog-from-flickr.phpというページを作成したすべてのことに基づいて、webサイトのルートに配置し、次の簡単なフォームを取得するために呼び出すことができます。 (ソース: mikeschinkel.com )有効なphotoset idを入力し、そのボタンをクリックすると、次のようなブログ投稿にリダイレクトされます! (ソース: mikeschinkel.com )すべてを機能させるには、上記の簡単なコードよりも少し複雑で、完全に文書化する時間はありませんが、レビューのために以下に投稿します(また、 ダウンロードすることもできますここから )。特筆すべきは、コードの次の側面です。 スクリプト最新の25枚の写真をプル写真セットから、それらの最も古いものの1つをブログします。一括でアップロードしてから、時間順に投稿したいと思いました。 25を超える数をアップロードする場合、定数flickr_photo_countの値を最大500(500はflickrで指定された制限です。)に大きくする必要がありますスクリプトの実行にかかる時間。目立たないかもしれません。 スクリプトwp_postmetaにflickrの写真idを隠しカスタムフィールドとして保存キー'_flickr_photo_id'を使用します。それは私がそれが前にブログされたかどうかを見分ける方法です。 スクリプトhttp postname__メソッドを使用する(つまり、html <form>)を使用する場合http getname__メソッド(呼び出しurlを直接)から誤って投稿プロセスをトリガーしないおよび別の写真セットからの投稿を許可. このスクリプトは、current_user_can('publish_posts')を使用して、ログインしているユーザーのみを確保するを使用して、投稿権限を設定すると、投稿ロジックをトリガーできます。 スクリプトは写真のdescriptionをflickrから取得して使用します投稿コンテンツの<img>タグのプレフィックスとして(私の例のスクリーンショットには説明がないため、写真のみが表示されます) スクリプトrlでphpのgetimagesize()を呼び出すは、<img>タグの高さと幅を取得します。サーバーがそのように構成されていない場合、画像にサイズと幅のタグが表示されません(実際にコードがクラッシュする可能性があります;私はテストできません。クラッシュする場合は、わかります。 :) flickrからタグを持ち込んでタグとして追加する努力はしませんでしたが、それは他の誰かにとって価値のある練習になるでしょう。 そしてそれはそれについてです。コードについて...flickr写真ブログコード:<?php /* blog-from-flickr.php allows the wordpress blog owner to blog a recent photo from a flickr photoset just by clicking a button. author: mike schinkel (http://mikeschinkel.com) just drop this example into the root of your website and call directly to see it work. use the class in your plugins or themes. in answer to: http://wordpress.stackexchange.com/questions/2830/ */ include "wp-load.php"; define('flickr_api_key','{your_flickr_api_key_goes_here}'); define('default_photoset_id','{your default_photoset_goes_here'); define('flickr_photo_count',25); define('flickr_get_url','http://api.flickr.com/services/rest/'); $photoset_id = default_photoset_id; if (count($_post)==0) echo <<<html <html> <body> <form method="post"> enter flickr photoset id: <input type="text" name="photoset_id" value="{$photoset_id}" size="25" /> &nbsp;<input type="submit" value="blog recent photo from flickr!" /> <input type="hidden" name="go" value="go!" /> </form> </body> </html> html; else blogflickrphotosetphoto::blog_photoset_photo($_post['photoset_id']); class blogflickrphotosetphoto { static function blog_photoset_photo($photoset_id) { if (current_user_can('publish_posts')) { $photoset = self::get_photoset_photos($photoset_id); if (!$photoset) { echo 'not a valid photoset id. <a href="#">try again</a>.'; } else { $photo = self::get_photo_to_blog($photoset); if (!$photo) { echo 'unexpected error. photo retrieval failed.'; } else { $permalink = self::blog_photo($photo); wp_safe_redirect($permalink); } } } } static function blog_photo($photo) { $img = self::get_photo_html($photo); $photo_info = self::get_photo_info($photo->id); $description = ($photo_info ? "{$photo_info['body']->photo->description->_content}<br/>" : ''); $url = self::get_photo_url($photo); $post_id = wp_insert_post(array( 'post_title' => $photo->title, 'post_type' => 'post', 'post_author' => 1, 'post_content' => "{$description}{$img}", 'post_status' => 'publish', 'comment_status' => 'open', 'ping_status' => 'open', 'post_parent' => 0, )); if ($post_id) { update_post_meta($post_id,'_flickr_photo_id',$photo->id); $url = get_permalink($post_id); } else { $url = false; } return $url; } static function get_photo_to_blog($photoset) { global $wpdb; $photo = false; if (isset($photoset['body']->photoset->photo)) { //collect the list of flickr photo_ids from our "n" most resent photoset photos $photos = $photoset['body']->photoset->photo; foreach($photos as $index => $photo) { $photo_ids[$index] = $photo->id; } $photo_id_list = "'" . implode("','",$photo_ids) . "'"; //get a list of all photos we've already blogged $posts = $wpdb->get_results("select post_id,meta_value from wp_postmeta where meta_key='_flickr_photo_id' && meta_value in ({$photo_id_list})"); //remove any photos from the list we've already blogged $photo_ids = array_flip($photo_ids); foreach($posts as $post) { if (isset($photo_ids[$post->meta_value])) { unset($photo_ids[$post->meta_value]); } } //grab the earliest photo we've not blogged if (count($photo_ids)==0) { $photo = false; } else { krsort($photo_ids); $photo = $photos[reset($photo_ids)]; } } return $photo; } static function get_photoset_photos($photoset_id) { $photoset = self::flickr_get(array( 'method' => 'flickr.photosets.getphotos', 'photoset_id' => $photoset_id, 'media' => 'photos', 'per_page' => flickr_photo_count, )); return $photoset; } static function get_photo_info($photo_id) { $photo_info = self::flickr_get(array( 'method' => 'flickr.photos.getinfo', 'photo_id' => $photo_id, )); return $photo_info; } static function get_photo_html($photo,$size='') { $url = self::get_photo_url($photo,$size); list($width, $height) = getimagesize($url); $hwstring = image_hwstring($width, $height); return "<img src=\"{$url}\" alt=\"{$title}\" {$hwstring} />\n"; } static function get_photo_url($photo,$size='') { extract((array)$photo); $size = (!empty($size) ? "_{$size}" : ''); // if empty the 500px version will be returned. return "http://farm{$farm}.static.flickr.com/{$server}/{$id}_{$secret}{$size}.jpg"; } static function flickr_get($params,$args=array()) { $http = new wp_http(); $params['api_key'] = flickr_api_key; $params['format'] = 'json'; $params['nojsoncallback'] = 1; $params = http_build_query($params); $url = flickr_get_url . "?{$params}"; $result = $http->get($url,$args); if (isset($result['response']['code']) && $result['response']['code'] == 200) $result['body'] = json_decode($result['body']); else $result = false; return $result; } } 全自動flickr写真ブログさらに先へ進む必要がある場合は、http postname__でトリガーする代わりに、上記を再コーディングして擬似cronを使用できます。これに役立ついくつかの記事へのリンクを次に示します。 タイミングがすべて:wordpressでのスケジューリング wordpressでの疑似cronジョブ wpcron の実験 cron developers demo plugin また、擬似cronで十分でない場合は、常にスクリプトの名前を不明瞭な名前に変更し、実際のcronを使用して不明瞭な名前のurlを取得できます。そのルートに行く必要がある場合は、 googleでcronタスクの設定方法を確認してください。 。どちらの場合もcronを使用すると、ログインしないため、おそらくcurrent_user_can()コードを削除する必要があります。追伸flickr nsidの取得(ユーザーid)上記以外にも、いくつかのメソッドでflickr nsidを取得(別名ユーザーid)が必要な場合があります。 flickr.people.getinfo p.p.s. flickrでphpスクリプトを認証するのは難しい使用した例では、呼び出し元を認証する必要がないことに注意してください。認証にはもう少し関与するので、必要な場合は、flickrphpのライブラリを調べてください。