twitter API 1.0から1.1へ移行メモ
12日の明け方に、今まで使えていたエンドポイント(APIのURL)が使えなくなりあちらこちらで話題になっていた。具体的には
ttp://twitter.com/statuses/user_timeline/NNNNNN.xml
が使えなくなり
ttps://api.twitter.com/1/statuses/user_timeline.json
ttps://api.twitter.com/1.1/statuses/user_timeline.json
と、APIバージョンつきのURLを使ってね、ということ。
twitter公式発表だと、API 1.0 が使えるのは2013年3月までなので、この際ウチで使ってるtwitterのAPIなども1.1に変更した。
一次情報はこちら
https://dev.twitter.com
https://dev.twitter.com/docs/api/1.1
今まで意図通りに動いているスクリプト類は、1.1のエンドポイントに変更するだけでほぼOK。心配するほど大きな変更はなかった。
うちの場合データ取得などは、すべてXMLでやっていて、公式発表によると、RSS XMLは廃止、なので、jsonでの取得に切り替えた。twitterの公式ページには具体的なリクエストやパラメータなどが載っていて、サンプルもあって助かった。
mentions → mentions_timeline とバージョン番号の有無以外に変更になったAPIや廃止されたAPIもあるので、それは公式サイトを参照ください。
perlで作ったスクリプトでひとつひっかかったのがPOST。
1.0と同じデータを1.1のエンドポイントにリクエストすると、BadRequest 400が返ってくる。code 215エラーとか。1.0だと問題なかったのになんじゃそりゃ、と検索しまくってもそれらしい問題は出てこない。GETで取得するものは大丈夫。てことはOAuthでPOSTのリクエストに変更があったのか、と公式ページから辿ってみるとOAuthに関して、1.1は1.0よりもstrictになったらしい。でも、それならほかの開発者からも呪いの声が上がってるはず。公式ページを読んでも、OAuthのデータの作り方は今までと同じで問題ない。
あれこれ検索したり、CPANからNet::Twitterをダウンロードして眺めてみて、結論。
画像など添付のため、multipart form-data形式でのPOSTを受け付けるようになっていて、このPOSTは form-data なのか普通の(?)application/x-www-form-urlencoded なのかを明示する必要があったようだ。
これまでHTTPのヘッダのcontent_typeは何も指定せずそのまま通ってたんだけど
と、指定することで無事解決。…ほぼ一日ハマってしまった。
POSTリクエストの一次情報はこちら
https://dev.twitter.com/docs/auth/creating-signature
昨日、WEBの表に出てるところは、すぐに気づいて直してまわって、やれやれ終わったぜ、と思ってたら、cronで使ってるものがあってすっかり忘れてた。
cronで使ってたのは 「趣味は読書2」 という公開中のWEB本棚サービスのtwitter連携。
twitterで本のタイトルや、著者名をつぶやくと、その本がすでに本棚に入ってるかどうかをリプライする。二重買い防止のため、本屋さんなどで「うーん、これ読んだっけ?」な時に重宝してる機能だった。
- 『おかえりください』サウンドノベルWINDOWS版
- 『おかえりください』本編を加筆修正、6つのバッドエンド分岐シナリオを追加してサウンドノベル化!
音と映像が、血まみれのこっくりさんの惨劇を蘇らせる。 - 【無料体験版】はこちら
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
EPUB3作成webサービス
テキストファイルと表紙画像ファイルをアップロードするだけでEPUB3を作成するページを作った。
https://books.doncha.net/epub/
ので、例によって忘れないうちにメモ
(ちなみに。作成したEPUB3、縦書き表示のスクリーンショット → kindle KDPの縦書き表示 )
EPUB3といっても、ファイルのほとんどはxhtmlとcssなので、HTMLをエディタで直に書ける程度のスキルがあればそれでOK。書誌情報の設定ファイルなどもXMLのようなもので、ひな形ひとつあれば、どこにどんな情報を入れるのか見当がつくので上書きすればOK。最後にそれらを所定のディレクトリにおさめて、zipで梱包するだけ。
以上、エディタとzipするためのアプリがひとつあれば手作業でできる。
上記のことをperl を使って、サイトにCGIを組み込んでみた。といっても難しいことはなく手順どおりにやるだけだった。
EPUB3ファイルのディレクトリ構成やファイルのひな形には、FUSEeというフリーウエアが出力する .epub ファイルを参考にした。
ファイル、ディレクトリ構成
mimetype
META-INF/container.xml
OEBPS/content.opf
OEBPS/text/nav.xhtml
OEBPS/text/cover.xhtml
OEBPS/text/contents001.xhtml
OEBPS/images/cover_hyo1.jpg
OEBPS/images/hyo1.jpg
OEBPS/style/default.css
OEBPS/style/nav.css
上記で必須なのが META-INF/container.xml
ここで指定されている OEBPS/content.opf が基本設定ファイルとなってる
content.opf
これに実体ファイルのありかやID名など、いろいろなお約束が書かれている。大事なファイル。
・実体ファイルとそれに対するIDの組み合わせの羅列、のようなもので、これが基準となるファイル。
・identifierのBookIDは一意の文字列。なので、URLとDBに登録した連番と組み合わせて作った。
([10/11 17:55:46] 訂正。連番ではなく、IPアドレスとperlのtimeを組み合わせた物に変更した)
大雑把に。実体ファイルに ID をつけて、ID名で指定していく。IDと実体ファイルは1対1。複数IDに同じファイルを指定するとValidatorにひっかかる。
・metadata で本の定義。
・manifest で使うすべてのファイルのidなどを定義。
・spine は読む順番に上から下へ並べる。linear=yes が順番に組み込む linear=noは順番には出ない(カバーなど)
・guide はどうやらEPUB2までの下位互換、らしい。
OEBPS/text/contents001.xhtml
本文ファイル(名前は content.opf に指定。特に決まった命名規則はない)
ビューワーによって一度に読み込めるファイルサイズの上限がある、という話なので、わたしのスクリプトでは「章立て」ごとにファイルを分割した。contents001.xhtml contents002.xhtml contents003.xhtmlなどなど。
OEBPS/text/nav.xhtml
目次ファイル。本文ファイルの見出し h タグにidをふってあるので、それを ol タグでリストにしたhtmlファイル。本文ファイルと整合性チェックが入るのできちんと合わせる必要がある。
[11/16 12:24:12] 追記。kindleで目次を設定するには
OEBPS/toc.ncx というファイルが必要。guideにtype tocを指定して、spineにhtml版目次を指定する必要がある。
[12/19 14:56:52] 追記。kindleの目次について整理した → https://t2aki.doncha.net/?id=1355879465
OEBPS/text/cover.xhtml
表紙ファイル。img タグで表紙画像を指定しているだけのhtmlファイル。content.opf のspineの項目 coverの linearをno にすることで、本を開いたときに表紙を表示しないようにしてある。
OEBPS/style/
OEBPS/images/
の2つのディレクトリには各々スタイルシートと画像ファイルが入っているだけ。スタイルシートは https://www.epubcafe.jp/egls/kusamakura で公開してくれている basic_vertical.css を基本にして使わせてもらった(ありがとうございます)
HTMLにタグづけしてスタイルシートを頑張れば、凝ったレイアウト・デザインも可能。とりあえず今回は h タグと p タグをつけ足しただけの単純な本文HTMLファイル。
mimetype は application/epub+zip と一行、ファイルタイプが書かれたファイル
以上のファイルを揃えてzipで梱包すれば EPUB3 ファイルのできあがり。
・mimetype はzipファイルの中で先頭に置く必要がある。
・mimetype は圧縮してはいけない。
この2点だけ注意。
perl の Archive::Zip
これで mimetype を圧縮せずにまず先頭に置いて、あとは適当な順番で addFile する。
ウチのようなテキトーなサイトではなくて、EPUB3の仕様などは以下のサイトを参照にしましょう。
https://tutorial.epubcafe.jp
https://blog.imagedrive.jp/epub3
と、作ってみた感想。
普通にHTML書けばそれでイケる。ので、作って公開したのはいいけど、他のパッケージソフトや、フリーウエアで使い勝手の良いものを見つけて、凝ったレイアウトデザインを目指したほうがいいような気がする。
とりあえず、ウチの場合、テキストファイルと画像ファイルだけ流し込めばそれっぽく電子書籍にはなるので、電子書籍って、EPUBってこんな感じなのか、という程度の使い方でよろしくお願いします。
ちなみに、実際に
https://books.doncha.net/epub/
↑このページに本文テキストと表紙用画像を流し込んで作ったEPUB3で、amazon、kindleストアに並べて販売中!
「doncha.net のkinle本たち」
[2013/02/04 14:21:35] 追記。
EPUB3をkindleのKDP登録に使う場合、少しクセがある。そのあたり、検索されているようなので、この雑記帖に散らかしてある縦書きやkindleの目次についてなどへのリンクをまとめてみた。
「kindle EPUB3作成のまとめ1」
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
EPUB3作成メモ
kindleをはじめとして、EPUB3で電子書籍、という流れがいよいよ本格化してきてるので、EPUB3ファイルを作成するためのメモ。
とりあえずEPUB3ファイルを作ってみる
https://weekly.ascii.jp/elem/000/000/049/49724/
↑この記事を参考に
・本文
青空文庫から「虹の橋」久生十蘭 → ファイルダウンロード →46097_47970.html をダウンロード
・縦書きCSS
https://www.epubcafe.jp/egls/kusamakura で公開してくれている basic_vertical.cssをダウンロード
材料が揃ったら、とりあえずそのまんま。
https://epubpack.cloudapp.net
↑このサイトに上記ファイルをアップロードしてEPUB3を作成してみる。
※ Safari ver6.0.1 だと、htmlの本文が出力されないので、Firefoxで試行。
Validationでエラーになった epubcheck(https://code.google.com/p/epubcheck/)
Safariでアップロードしていた時
エラー → is invalid; must be an XML name without colons
対応 →
remove non-alphanumeric characters from your book ID
そもそもSafariだとうまく生成してくれないので、これがエラーの原因になってるんだか不明だった。
FireFoxでアップロードしていた時
エラー → element rb not allowed here
対応 → 青空文庫で使っているルビのタグがEPUB3だと未対応?ってことか。rbタグを外したらエラーはなくなった。
EPUB3の確認というかmacでEPUBビューワーをどれにすればいいのか調査中。なので現時点ではファイルを作るところまで。
EPUB3のファイル構成としては。
mimetype
META-INF/container.xml
OEBPS/content.opf
OEBPS/nav.xhtml
OEBPS/toc.ncx
OEBPS/HTMLFILE contents
OEBPS/STYLESHEET contents
OEBPS/IMAGEFILE contents
これらが揃えばEPUB3ということでブラウザやビューワーで閲覧・読書できるものになる。
META-INF/container.xml が OEBPS/content.opf をルートファイルに指定、content.opfの中に本文の指定などがある。container.xml から辿っていけば構成がわかる、ということか。
META-INF/container.xml 以外のOEBPSなどに関して命名規則は厳密に決まってるわけでもなさそう。
WEBでやるとしたら、contentsをアップロードしてもらって、contents以外を自動生成して、zipで圧縮してダウンロード。という流れか。html、cssを作るところが面倒なら、テキスト流し込みだけにして、htmlの生成、デフォルトcssもWEB側で用意するのかな。
確実な一次情報源はこちら → EPUB3チュートリアル
※ちなみに。
EPUB の構成を見るために、中を覗く。.epub という拡張子だけど、実際は zipで固められているので、拡張子を .zip にして解凍すればOK。
mac OS X で hohoho.epub を hohoho.zip リネームしてダブルクリックすると .cpgz という拡張子のファイルになってしまう。デフォルトの解凍.app は、mimetypeから別のファイル形式だと判定してしまう、らしい。
【解決策】
ターミナルで unzip hohoho.zip と叩けばOK。
content.opf の生成など、続きは → EPUB3作成webサービス
縦書き表示のスクリーンショット → kindle KDPの縦書き表示
実際に作ったページは → EPUB3::かんたん電子書籍作成
EPUB3をkindleのKDP登録に使う場合、少しクセがある。そのあたり、検索されているようなので、この雑記帖に散らかしてある縦書きやkindleの目次についてなどへのリンクをまとめてみた。
こちら → kindle EPUB3作成のまとめ1
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
今日時点、アプリのダウンロード数
iTunes Connect の9月の正式な売り上げ報告は、たぶん10日過ぎぐらい。毎日毎週のトレンドというのを見ることができて、それの最新が二日前の9月30日。ということで、今日時点、9月いっぱいまでのダウンロード数はわかる(確定ではない)
8月15日にアプリを公開して、9月30日まで、約一ヶ月半。
・アプリのダウンロード数は339
・有料コンテンツのダウンロード数は9
・販売金額は1760円で、販売アカウントの取り分は1232円
有料コンテンツは4本で、購入チェックのために公開されたらわたしがまず買うので、9本のうち、5本が正味売れた本数。
寒い数字。とはいえ実際のところ、9月10日まで作品収録数が1本だったのでバナーもなく宣伝もなし、9月11日に作品を3本追加してtwitterで告知してバナーもはりつけた…んだけど、異常終了してしまうSakuttoBookの不具合が見つかり9月12日にはバナーをとりさげて、宣伝もしなくなって、今にいたる。
なかなかうまくいかないものだ。
25日にSakuttoBook のバグフィックス版が届いたので、準備していたくまっこさんの「まほろば」(神さまに恋をしてしまった天使の話などファンタジー短編集)を収録して、審査申請中。iOS6でiphone5でどうなのかよくわからないけど、問題がなければ今週〜来週あたりに公開になる、はず。そしたら再び告知・宣伝を始める。くまっこさんに続いて、久地加夜子さんの「暗闇のスピカ」(R18。実は悲しくてせつない官能小説)も準備は完了してるので、続けてまたアプリに収録して審査に出す予定。その後も作品は準備中。
アクセスログを見てると、「同人誌 iphone」「同人誌 アプリ」などの検索で、 小説同人誌Select のページにアクセスされている。小説を探してるのか、漫画を探してるのか、検索結果に表示されるタイトルには小説同人誌と出ているので、小説を探してるひともそれなりに見込める、かな。もっとこのページへのアクセスを集める方法を考える。てことで 「小説同人誌Select」のfacebookページもこっそりでっちあげてある。
創作文芸見本誌会場HappyReading の場合、トップページよりも各々の詳細ページが着地ページとなっている(サークルさん、作者さんがtwitterなどで拡散してくれてるから)なので、アプリも作品数が増えればそれだけ流入のクチが増えて、全体のダウンロードに繋がるはず。
創作文芸というか、同人の小説も商業流通のものに負けないしっかりしたものがあるということを認識してもらわなきゃ、だ。「 日野裕太郎 ?どっかで見たことがあったなあ」「 くまっこ ?アプリでみたかも」「ほら、確か読んだことあるよ、 久地加夜子 って」などなど少しずつ広げていこう。
[10/02 19:07:15]
アプリの公開に関する記事は随時。でも、売り上げに関する記事は、サマリ(集計)はネタにするけど、詳細は内緒に。複数のひとが絡んでくる場合に、安直にどれがいくつダウンロードされた、なんてことを言う訳にはいかない。
[10/04 18:34:49]
うううう。昨日3日の明け方、InReviewになったんでそろそろか!と思ったら、今日4日、リジェクトされてしまった(却下・ダメ出し)どうやら、iOS6からiCloudの扱い?Storageの使い方に関するガイドラインが変わった、らしい(英語ちゃんと読んでないので適当)
てことで、ふたたびみたび、SakuttoBookに問い合わせ。調査・対応をしてもらうことになった。
ガイドラインなど事前・直前にわかることなんだから、しっかり対応しておいてくれよ…って、もしかして、おれ、人柱やらされてる?
[10/09 21:39:19]
SakuttoBookの開発元からメールで対応策。
iOS6で違ってるところがある。ということは、iOS5ターゲットでビルドすれば審査が通る、かもしれない。
現状のSakuttoBookでは、iOS6の機能を使ってるわけではないので、iOS5ターゲットで作って審査を通す方向で、Xcode4.5ではなく、古いバージョンのXcoce4.4でビルドし直してみてくれ、と。
うーん、なんか根本的な解決になってないような気がする。
でも、iOS6への対応はまだ時間がかかるということなので、しかたなく、教えてもらったURLから古いXcode4.4.1をダウンロードして、HDDのアプリケーションフォルダとは違う場所に専用のフォルダを作ってインストール。ビルドして実機で確認した上、再びみたび、iTunes connect にバイナリをアップロードして審査申請。Waiting For Reviewとなった。…って、その場しのぎな対策に見えるけど、これで大丈夫なのか。
[10/18 08:56:32]
今朝、ふたたびリジェクトされる。
て、そうだよなあ。古いバージョンでビルドしたらいける「かも知れない」という対策だからなあ。開発販売元に再度問い合わせて、きちんとiOS6の基準を満たしたバージョンを用意してもらわないと無理。困る。
[10/19 18:31:39]
iOS6 で変更になった Storage 、iCloudの扱いに対応したバージョンを送ってもらった…けど、画面の見栄えが今いちだと。スクリーンショットを見せてもらったら、画面の余白(5で伸びた縦部分)がグレーで塗りつぶされていて、残念すぎる。塗りつぶし部分を黒にしたバージョンを待つことになった。
すんなりいかんなあ。
・ 小説同人誌Select 公開中
・iTunes Store はこちら→ https://itunes.apple.com/jp/app/id546230414?mt=8
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」