DEV

twitterプロフィール画像をFilebinderに関連づけつつ保存する

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