Pocket
LINEで送る

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

カテゴリー: プログラミング

コメントください

関連記事

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

プログラミング

Go – leveldb

Goで使えるLevelDB。 syndtr/goleveldb ドキュ 続きを読む …

%d人のブロガーが「いいね」をつけました。