全然汎用的じゃないけど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; }