全然汎用的じゃないけどtwitter画像を保存してみた。
/** * Twitter画像の取得関数 */ public function save_twitter_profile_img($model, $twitter_img_url, $user_id){ $args = array(array(18, 18), array(48, 48)); //サムネイルのサイズ $save_dir_path = '/upload/User/' . $user_id . '/img'; $dir = new Folder(WWW_ROOT . $save_dir_path); if($dir->find('.*')) return true; $dir->create(WWW_ROOT . $save_dir_path); $url = str_replace('_normal', "", $twitter_img_url); //_normalを削除 $url_info = parse_url($url); $path_info = pathinfo($url_info['path']); $save_path = WWW_ROOT . $save_dir_path . '/' . $path_info['filename'] . '.' . $path_info['extension']; if($this->resize_image_from_out($model, $url, $save_path, 100, 100)){ //100*100の画像 if($this->create_thumbnail($model, $save_path, $args)){ //FileBinderのattachmentsテーブルに登録 $Attachment = $this->_getModelObject('Attachment', 'attachments'); $data = array( 'Attachment' => array( 'model' => 'User', 'model_id' => $user_id, 'field_name' => USER_IMG_FIELD_NAME, 'file_name' => $path_info['filename'] . '.' . $path_info['extension'], 'file_content_type' => 'image/' . $path_info['extension'], 'file_size' => 10 ) ); $Attachment->create(); $Attachment->save($data); return true; } } return false; }
いやー汎用的じゃない。あとまだしっかりチェックしてない。でもできた。$this->resize_image_from_outとかは、GDでリサイズする関数に渡してる。$this->_getModelObjectは、BakeのModelTaskに書いてあったテーブルをモデルとして扱えるようにできる関数だから使ってみた。
/** * テーブルをモデルにしてくれる関数 * @param $className * @param null $table * * @return Model */ public function _getModelObject($className, $table = null) { if (!$table) { $table = Inflector::tableize($className); } $object = new Model(array('name' => $className, 'table' => $table, 'ds' => null)); $fields = $object->schema(true); foreach ($fields as $name => $field) { if (isset($field['key']) && $field['key'] === 'primary') { $object->primaryKey = $name; break; } } return $object; }