2012年11月19日


HTML(ローカル) を使用して Facebook へ画像をアップロードする

『App ID/API Key』が必要です。以下の client_id のフィールドに API Key をセットして送信すると、Facebook にログインしていない場合は、ログイン画面が表示されるのでそこでログインすると、URL に access_token=アクセストークン の形でセットされているのでそれを取得します。

※ ログイン済の場合は Success と表示されるのでアドレスバーを見ます。

get_login.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<body>
<form action="https://www.facebook.com/dialog/oauth/">
<pre>
<input type="text" name="redirect_uri" value="http://www.facebook.com/connect/login_success.html">
<input type="text" name="response_type" value="token">
<input type="text" name="client_id">
<input type="text" name="scope" value="user_about_me,user_photos,read_stream,publish_stream">
<input type="submit" name="send" value="get login">
</pre>
</form>
</body>
</html>

『アクセストークン』を以下の該当部分( FORM の action の中 )にセットしてブラウザで実行してファイルをアップロードできます(メッセージも同時に投稿できます)

▼ UTF-8N で保存します
file_upload.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Facebook に画像アップロード</title>
</head>
<body>
<form method="post" action="https://graph.facebook.com/me/photos?access_token=アクセストークン" enctype="multipart/form-data">
<pre>
<input type="file" name="source">
<textarea name="message"></textarea>
<input type="submit" name="send" value="file upload">
</pre>
</form>
</body>
</html>





タグ:Facebook API
posted by at 2012-11-19 23:29 | WEBサービス | このブログの読者になる | 更新情報をチェックする

2012年01月13日


bitly の URL 短縮結果のカスタマイズ

bitly では、アカウントを持っていると、以下のような 1xfQZVR 部分を簡単にカスタマイズして他の人がまだ使って無い文字列に変更する事ができますが、自分でドメインを所有していて、その管理ができる場合は、短縮 URL のドメイン部分もカスタマイズする事ができます

q.winofsql.jp/1xfQZVR



Settings ページには以下のようなセクションがあり、最初は『追加』ができるようになっていて、一つ追加すると、編集のみが可能になっています。追加直後、デフォルトの短縮 URL のドメインとなりますが、bit.ly に戻してもいいし、他の bitly.comj.mp を使っても同じ結果となります。



本来は、もっと短いドメインを取得して使うのだと思いますが、とりあえず自分のドメインを使っておくと、あらゆる URL は自分のサブドメインとして表現できる事になるので、いろいろな宣伝にも使えると言ったところだと思います。

ちなみに、アマゾンのページを短縮すると、amzn.to/MOVIEsuper8 のようになります


ランダム部分もカスタマイズする

このアマゾンの URL のように、1xfQZVR 部分も変更できるので実行してみましょう。



q.winofsql.jp/CustomMyShortDomain


カスタマイズ文字列は早いもの勝ち

大文字小文字が区別されるので、同じ意味でいくつもトライできます。さすがに例えば Heart なんてのは取れませんが、q.winofsql.jp/HEARt なら取れたりしますし、長い文字列だと結構取れたりもします。

また、案外こういうのも取れたりします => q.winofsql.jp//MOVIE1


削除はできないけれど

同じ URL に違う文字列を設定できます。つまり、最初のランダム文字列も生きています。そうなると、解らなくなるので少なくとも最初は アーカイブに移動して管理するといいと思います。
(できればどこかに登録しておくといいとは思います。)
パーソナルリンク : PC に保存されるリンクリストです



bit.ly/winofsql
bitly.com/winofsql
j.mp/winofsql
q.winofsql.jp/winofsql



posted by at 2012-01-13 21:42 | WEBサービス | このブログの読者になる | 更新情報をチェックする

2010年09月20日


フリーフォントで簡単ロゴ作成のテキストをそのフリーフォントで TCPDF を使用して埋め込みの PDF にできるようにしました

2010/09/20 更新

色とサイズ指定が可能になりました。

Tcpdf_freefont

テキストに入力した改行はそままま反映されるので、普通に文章を入力した結果
をフリーフォントで表現した PDF でその場で手に入れる事ができます。

Freefont_pdf

Freefont_pdf2

※ PDF 側へ渡す情報は、フォントの種類とテキストだけです
※ フリーフォントの情報は、PDF に埋め込まれます。
※ PDF 作成には TCPDF を使っています

※ 非埋め込みフォントとして、MS フォントを使う事も可能なので
  近日実装致します。
posted by at 2010-09-20 21:49 | WEBサービス | このブログの読者になる | 更新情報をチェックする

2010年07月25日


自分用WEBサービス : PHP版 : Seesaa の設定の「更新」( Ruby よりやる事が多くなるのでおすすめできません )

設定データを直前のページから正規表現等で取り出して設定しないと汎用的なコード
にはなりません。正式 API では無いのでそこまでやっても、仕様が変更されるおそれが
あるので、そのへんを自動的にする Ruby が能力で勝っています。

このサンプルでは、自分の管理ページで実際に処理を行って、ieHTTPHeaders
でダンプしたものを直接貼り付けてテストしました。データは同時に更新されて
いましたので、「再構築」だけという選択肢は無いようです。

しかし、このサンプルでは、一連のブラウザの処理の代わりを行う方法の全てが
書かれており、いろいろな場面で利用可能なはずです。

※ CURLOPT_MAXREDIRS と CURLOPT_FOLLOWLOCATION はリダイレクト用です
※ CURLOPT_POSTFIELDS は、配列で渡すと URL エンコードしてくれます。
<?
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

// *********************************************************
// curl 共通
// *********************************************************
$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
// ***********************************************************
// クッキー等が自動的に受け渡しされるようにする
// ***********************************************************
curl_setopt($curl, CURLOPT_COOKIEFILE, './cookiefile.txt'); 
curl_setopt($curl, CURLOPT_COOKIEJAR, './cookiefile.txt'); 
curl_setopt($curl, CURLOPT_MAXREDIRS, 10); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 

// *********************************************************
// まず最初のページを取得する
// *********************************************************
$seesaa_url = "https://ssl.seesaa.jp/pages/welcome/login/input";
curl_get( $seesaa_url, true );

// *********************************************************
// サインインする
// *********************************************************
$seesaa_url = "https://ssl.seesaa.jp/pages/welcome/login/input";
$seesaa_data = array();
$seesaa_data['member__email'] = 'メールアドレス';
$seesaa_data['member__password'] = 'パスワード';
curl_post( $seesaa_url, $seesaa_data, true );

// *********************************************************
// 設定ページの表示
// *********************************************************
$blog_id = "2181378";
$seesaa_url = "https://blog.seesaa.jp/pages/my/blog/home/?blog_id=$blog_id";
curl_get( $seesaa_url );

// *********************************************************
// 目的の更新
// *********************************************************
$seesaa_url = "https://blog.seesaa.jp/pages/my/blog/settings/basics/edit/input";
$seesaa_data = 'blog__title=WEB+%90E%90l&__tags-backuped=&__tags-changed=0&__tags=&__tag=&__tags-init-backuped=seesaa-no-val&blog__description=WEB%83T%83C%83g%8D%5C%92z%82%C9%95K%97v%82%C8%90E%90l%8C%7C%82%CC%8F%D0%89%EE&blog_category_id=41&blog__keywords=WEB%2CPHP%2Cjavascript%2C%83e%83N%83j%83J%83%8B%2C%8BZ%8Fp&blog__nickname=ユーザー&blog__auto_rebuild=0&blog__public=1&blog__sitemap=1&style__weather=&bookmark_service=yahoo&bookmark_service=livedoor&bookmark_service=hatena&blog_ext__post_twitter=1&twitter_setting__auto_post=0&twitter_setting__ap_format=&twitter_setting__ap_order=1&twitter_setting__ap_reply=1&twitter_setting__category_id=0&twitter_setting__ap_title_format=%3C%25+date+%7C+date_format%28%22%25Y%94N%25m%8C%8E%25d%93%FA%22%29+%25%3E%82%CC%82%C2%82%D4%82%E2%82%AB&url_shortener__service=Bitly&url_shortener__login=ユーザー&url_shortener__api_key=R_3a9ed6fb41c0d66a2fd5baa45157d037&blog__mailmag_text=1&blog__mailmag_html=1&blog__mailmag_summary=1&blog__ui_level=0&blog__alert_comment=1&blog__alert_tb=0&blog__alert_email=メールアドレス&blog__richtext=0&blog__index_page_cnt=3&blog__archives_page_cnt=3&blog__archives_page_sort=1&blog__category_page_cnt=3&blog__category_page_sort=1&blog_ext__category_article_cnt=20&blog__rss_body=1&blog_ext__upload_detail_page=1&blog_ext__mobile_pagerize_size=2048&blog_ext__common_header=0&blog_ext__cache_width_thumbnail=320&blog_ext__full_view_thumbnail=1&blog_ext__upload_panel_layout=0&blog_ext__amazon_trackingid=&blog_ext__use_trace_searcher=0&trace_searcher=yahoo&trace_searcher=amazon&trace_searcher=twitter&trace_searcher=blog&force_reload=%8E%C0%8Ds';
curl_post( $seesaa_url, $seesaa_data );

curl_close($curl);

// *********************************************************
// curl GET 処理
// *********************************************************
function curl_get( $target_url, $ssl_option=false ) {

	global $curl;

	curl_setopt($curl, CURLOPT_URL, $target_url);
	curl_setopt($curl, CURLOPT_POST, false);


	if ( $ssl_option ) {
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
	}

	$result = curl_exec($curl);

	return $result;

}

// *********************************************************
// curl POST 処理
// *********************************************************
function curl_post( $target_url, $postfields, $ssl_option=false ) {

	global $curl;

	curl_setopt($curl, CURLOPT_URL, $target_url);
	curl_setopt($curl, CURLOPT_POST, true);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);

	if ( $ssl_option ) {
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
	}

	$result = curl_exec($curl);

	return $result;

}

?>
OK

関連する記事

自分用WEBサービス : Ruby による Seesaa の設定の「更新」
( つまり、最近アクセスされたページの再構築のようですが )

今回以下のソフトでテストしたのですが、思った以上に使いやすい事が解りました。
Cc_01
【ColorConsole 1.77】 コマンドプロンプト機能を拡張するタブウインドウを使ったWindows アプリケーション
posted by at 2010-07-25 23:31 | WEBサービス | このブログの読者になる | 更新情報をチェックする

自分用WEBサービス : Ruby による Seesaa の設定の「更新」( つまり、最近アクセスされたページの再構築のようですが )

1) キャラクタセット を UTF-8 にすること
  ( 但し、日本語がコメントのみの場合は SHIFT_JIS でも良い )
2) テキスト改行コード を LF にする事
3) サーバーのファイルのパーミッションを Perl と同様に実行可能にする事 ( 例: 755 )
4) .htaccess に以下追加
AddHandler cgi-script .rb

page.forms[1] の該当フォームの位置が Seesaa の仕様変更で変わる可能性が
あるので注意して下さい( 過去に一度変わりました )
具体的には、HTML を <FORM でサーチして、該当番号を [1] としてセットします
( 最初のフォームは 0 です。)
cgi.params['user'].to_s で、URL の user=メールアドレス を受けます。 ( URL エンコードして下さい ) cgi.params['pass'].to_s でパスワードを受けるので、SSL 対応のページ を使う必要があります。 cgi.params['id'].to_s は、ブログの番号なので管理画面のブログ一覧の 各 URL の最後の部分から取り出して下さい ※ Mechanize の最新バージョンは名前空間が変更されていますが、 ※ 再インストールが面倒なので使っていません。
#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"

# 標準エラー出力の出力先を標準出力に変更
$stderr = $stdout

require "cgi"
cgi = CGI.new

ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
agent.open_timeout = 600
agent.read_timeout = 600

#seesaa にログイン
page = agent.get("https://ssl.seesaa.jp/pages/welcome/login/input")
form = page.forms.first
form["member__email"] = cgi.params['user'].to_s
form["member__password"] = cgi.params['pass'].to_s
form.submit

# 対象ブログのページ
page = agent.get('https://blog.seesaa.jp/pages/my/blog/home/?blog_id='+cgi.params['id'].to_s )
# 設定ページ
page = agent.get('https://blog.seesaa.jp/pages/my/blog/settings/basics/edit/input')

form = page.forms[1]
page = form.click_button(form.buttons[0])
print "seesaa : " + cgi.params['id'].to_s + " : update : completed<br>"


関連する記事

さくらインターネット : Ruby : rubygems-1.3.5 のインストール( + mechanize )
land.to で ruby に mechanize をインストール


タグ:ruby
posted by at 2010-07-25 16:35 | WEBサービス | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します