プログラマメモ2 - programmer no memo2

目次

Bloggerのテンプレート変更していくぞ計画 2024/09/21

ここでメモをしておけば、あとで見返すであろう(自分)。
https://blogger-learning-rab.blogspot.com/2020/08/blogger-jisaku-02.html#chapter-10
mustacheを使って細かくファイルにしていくのはうまくいきそうな感じなので、これはこれでよくて。
構造(テンプレー)にたいする理解がないからそっち補強しつつ。
記事ならpartial/postに記事用のデザイン部品とか集めておきたいよね。
とは思ったのだけど、テンプレートタグでフォルダきる?
includableは定義でidが必要。includeでincludableを取り込む。取り込む際に指定するのはname。
section>widget、includable、includeって感じなのか
整理しないと何年やってもピンとこないなー
sectionにはガジェットを乗せることができる。
Bloggerガジェット(=ウィジェット)ということらしい。
「セクションは主に「ヘッダー」「メイン」「サイドバー」「フッター」で使われる。」ということらしい
なのでpartial/*section*/でフォルダを作成してそこセクションにのせるものの管理をするとか。









Bloggerのテンプレートをいじるのがつらい 2024/09/14

一年に3度はブログのデザインを変えたい思うわけですが、そのたびにBloggerのテンプレートひらいて絶望にかられるわけです。
記事書きたくても見た目を思い通りにできないだけで気持ちがしゅんとなりますよね...
ChatGPT o1-previewを使ってまえまえからもっているアイデアをそろそろ取り掛かってみたいなと思ったわけです。
ずばりあのつらいXMLをなんとかするぞということで、Mustacheテンプレートをつかって、いくつかのパートに分けてレンダリングして最終的なXMLするというものです。うまくいくのだろうか...いったんとりかかることにします。

ブログのフォントを変えてみたい。bloggerなのでひと手間必要。 2024/03/30

 気がつけば2024も春、桜の咲く季節となりました。

いろいろあせりつつも、達観といいますか、のんびりいこうと思う次第です。

ブログのフォントを変えてみたい。bloggerなのでひと手間必要。

 

https://note.com/chaberi/n/na0b1a29fcbf0

・ダブルクウォート(")を全てシングルクウォート(')に

・& は $amp; に

・3つのコード全ての末尾にバックスラッシュ(/) を追加

・crossoriginは crossorigin='anonymous'に変更

 

参考

https://fonts.google.com/ 

https://note.com/chaberi/n/na0b1a29fcbf0 

 

 

[blogger]編集(quick edit)ボタンを復活させたい 2021/04/17
2024/03/30

 2024/03/30 

 こちらのブログを参考にできました。

 

 https://fujilogic.blogspot.com/2021/07/quick-edit-pen-on-new-version-theme.html

でているようすは↓


 

 

以下、古い記事内容

bloggerです。

いろいろ理由はわかってないのですが、いつの頃から、編集(quick edit)ボタンがみえなくなってそれをを復活させたいというのが、動機となります。

 

 いまのところ、ログインしたユーザ(自分)がページを開いたときに編集(quick edit)ボタンがみえることはできていないです。(たぶんできないのかもしれない...)

<b:with value='data:view.isPage ? &quot;page&quot; : &quot;post&quot;' var='type'>
<a expr:href='&quot;https://www.blogger.com/&quot; + data:type + &quot;-edit.g?blogID=&quot; + data:blog.blogId + &quot;&amp;&quot; + data:type + &quot;ID=&quot; + data:post.id + &quot;&amp;from=pencil&quot;' expr:title='data:post.title' rel='nofollow'>XXXXXX</a>
</b:with>

 

参考

[blogger]公開日と更新日が違うときだけ、更新日を表示したいです。 2021/04/04
2021/04/09

 bloggerです。

ようやく記事の更新日付を表示できるようになったので、いろいろ工夫中です。

公開日と更新日が違うときだけ、更新日を表示したいです。


<!-- 公開更新日付 -->
<b style='clear:both;float:right;font-size: 13px;line-height: 13px;'>
   <b:eval expr='format (data:post.date, &quot;YYYY/MM/dd &quot;)'/>
 <br/>
 <b:if cond='data:post.date != data:post.lastUpdated'>
 <b:eval expr='format (data:post.lastUpdated, &quot;YYYY/MM/dd &quot;)'/>
 </b:if>
</b>

参考

https://spoontofork.blogspot.com/2018/06/blogger-show-last-modified-date.html 

https://indoor-days.blogspot.com/2019/08/QooQ.Update-date.html 

bloggerのレイアウトを変更中 2021/03/21
2021/04/29

記事の更新日を表示したいところから、いろいろ試して数日がたってしまった。 

わかったことをメモすると、version='1'だとだめで、それを変更して保存してもだめ。

それでいったんbloggerの新しいテンプレートに変換して、それから、再度自分のテンプレートを適用してもどらなくなった。。。

[BLOGGER API]全部のpostが欲しい 2015/04/05

javaです。
blogger apiです。
あるブログから全部のポストを取得したいです。
一回でとれるapiはないようなので、一回取得したら、nextPageTokenを使って取得していきます。

とりあえず、自分が使いやすかなーと思う感じのユーティリティーを作ってやってます。


package myblogger; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.net.URISyntaxException; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.List; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.blogger.Blogger; import com.google.api.services.blogger.BloggerScopes; import com.google.api.services.blogger.Blogger.Blogs; import com.google.api.services.blogger.model.Blog; import com.google.api.services.blogger.model.Post; import com.google.api.services.blogger.model.PostList; /** * * @author s.nakawaka * */ public class BloggerUtils { public static final JsonFactory JSON_FACTORY = JacksonFactory .getDefaultInstance(); /** * * @param applicatioName * @param authorize * @param clinetSecretsJson * @param dataStoreDir * @return * @throws GeneralSecurityException * @throws IOException * @throws URISyntaxException */ public static Blogger blogger(String applicatioName, String authorize, File clinetSecretsJson, File dataStoreDir) throws GeneralSecurityException, IOException, URISyntaxException { FileDataStoreFactory dataStoreFactory = new FileDataStoreFactory( dataStoreDir); // Set up the HTTP transport and JSON factory HttpTransport httpTransport = GoogleNetHttpTransport .newTrustedTransport(); // Load client secrets GoogleClientSecrets clientSecrets = GoogleClientSecrets.load( JSON_FACTORY, new FileReader(clinetSecretsJson)); // Set up authorization code flow // OAuth 2.0 scopes. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( httpTransport, JSON_FACTORY, clientSecrets, BloggerScopes.all()) .setDataStoreFactory(dataStoreFactory).build(); // Authorize Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize(authorize); Blogger.Builder builder = new Blogger.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName(applicatioName); Blogger blogger = builder.build(); return blogger; } public static Blog blog(Blogger blogger, String blogId) throws IOException { Blogs blogs = blogger.blogs(); return blogs.get(blogId).execute(); } /** * 次から次へとPostを読み込みます。 * @param list * @return * @throws IOException */ public static List<Post> getAllPost( com.google.api.services.blogger.Blogger.Posts.List list) throws IOException { List<Post> listOfPost = new ArrayList<Post>(); String nextPageToken = null; while (true) { PostList postList = list.execute(); listOfPost.addAll(postList.getItems()); if ((nextPageToken = postList.getNextPageToken()) == null) break; list.setPageToken(nextPageToken); } return listOfPost; } }

blogger apiを使う 2015/04/04

「blogger apiを使う」です。

構想としては、bloggerの記事から関連する記事を自動で挿し入れる仕組みを考えていまして、apiが提供されているので、まあ、できるのかなと。

javascriptでタグから生成するの使ってたりするのですが、どうも納得いっていなくて、試してみようかなと。


以前、相当、昔に何度かapiは使ったことがあったのですが、まあ、ひさしぶりなので、いろいろメモ。

まずは、api申請しないといけないので、許可がおりるまで、数日かかります。

情報は、ここから
 javaです。ライブラリ関連でてこずったので、現時点でおとしてきたのは以下
 最近、Leiningenを使っているので形式はそれ
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [com.google.apis/google-api-services-blogger "v3-rev47-1.20.0"]
                 [com.google.oauth-client/google-oauth-client-java6 "1.20.0"]
                 [com.google.oauth-client/google-oauth-client-jetty "1.20.0"]
                 ]

 以下簡単なコード

static void a(String applicatioName, String blodId, String authorize, File clinetSecretsJson, File dataStoreDir) throws GeneralSecurityException, IOException, URISyntaxException { final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); FileDataStoreFactory dataStoreFactory = new FileDataStoreFactory( dataStoreDir); // Set up the HTTP transport and JSON factory HttpTransport httpTransport = GoogleNetHttpTransport .newTrustedTransport(); // Load client secrets GoogleClientSecrets clientSecrets = GoogleClientSecrets.load( JSON_FACTORY, new FileReader(clinetSecretsJson)); // Set up authorization code flow GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( httpTransport, JSON_FACTORY, clientSecrets, BloggerScopes.all()) .setDataStoreFactory(dataStoreFactory).build(); // Authorize Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize(authorize); Blogger.Builder builder = new Blogger.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName(applicatioName); Blogger blogger = builder.build(); Blogs blogs = blogger.blogs(); // BlogUserInfos blogUserInfos = blogger.blogUserInfos(); Blog blog = blogs.get(blodId).execute(); }



Blogger - 自分のブログの全ての記事の取得 その3 - くらすたーで実験 2008/04/05

ブログの記事のタグ(ラベル)から類似した記事をみつける方法としてクラスタ解析が使えるのかしら、という試みのためのメモ。

うまくいくかわからないけど、
とりあえず手順をメモ。

えーと、まず、

  • Bloggerから全記事のタグ(ラベル)を取得する。
  • タグが出現したかどうかでベクトル化する。
  • Rで、クラスタの計算する。
  • なんとなくクラスタができてるか検証する。


Bloggerから全記事のタグ(ラベル)を取得する。
タグが出現したら1で出現しなかったら0で表現する。
現時点で、プログラミングメモ2は、657記事で、タグが218だった。
Rにデータを読ませる。

x<-matrix(scan("/tmp2/a.dat"),ncol=218, byrow=TRUE)


で次に、Rに計算させる。
d<-dist(x)
hc<-hclust(d)

で、
ans<-cutree(hc,k=200)

クラスタの数を適当に決めてファイルに出力
write(ans, file="/tmp2/a2.data", ncolumns=1)


結果をみているとなんとなくグループかされているようなので、kの値(クラスタの数)をいろいろためしていけば、類似記事をクラスタからみつくろって決定できるかも。

ここまで、書いてなんだけど、本当にできてるのか不安...


参考にした本
Rで学ぶクラスタ解析
新納 浩幸
4274067033

Blogger - 自分のブログの全ての記事の取得 その2 2008/04/05

Bloggerから全ての記事を取得します。
で、やりたいことは、取得したデータから記事ごとにつけられているタグ(ラベル)をベクター化したいので、その準備です。

で、やりたいことはこんな感じの表にしたいわけです。
※PDFをキャプチャしたものです。出典:Information Retrieval


Information Retrieval - 索引語の自動抽出


ただし、タグ(ラベル)なので出現頻度数は1か0のどちらかとなります。

とりあえず、データを使うための準備。
Google APIを使っています。
package mygg;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.google.gdata.client.GoogleService;
import com.google.gdata.client.Query;
import com.google.gdata.data.Category;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.util.AuthenticationException;
import com.google.gdata.util.ServiceException;

public class Blogger {

public static GoogleService createGoogleService(String user, String password)
throws AuthenticationException {
GoogleService service = new GoogleService("blogger",
"deiji-blogger-app");
service.setUserCredentials(user, password);
return service;
}

public static List<Entry> allEntry(GoogleService service, String blogId)
throws IOException, ServiceException {

URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogId
+ "/posts/full");
Query query = new Query(feedUrl);

DateTime min = DateTime.parseDateTime("1999-12-31T23:59:59");
DateTime max = DateTime.now();
List<Entry> returnList = new ArrayList<Entry>();
int index = 1;// !!
do {
query.setUpdatedMin(min);
query.setUpdatedMax(max);
query.setStartIndex(index);
Feed resultFeed = service.query(query, Feed.class);
List<Entry> entries = resultFeed.getEntries();
if (!(0 < entries.size()))
break;
index += entries.size();
returnList.addAll(entries);

} while (true);
return returnList;
}

public static void printAllPosts(GoogleService myService, String blogId)
throws ServiceException, IOException {

List<Entry> list = allEntry(myService, blogId);
// order older
Collections.reverse(list);
final String TAB = "\t";
for (Entry entry : list) {
System.out.print(entry.getPublished() + TAB + entry.getId() + TAB
+ entry.getTitle().getPlainText());
Set<Category> set = entry.getCategories();
for (Category category : set) {
System.out.print(TAB + category.getTerm());
}
System.out.println();

}
System.out.println();

}

public static void printTermOfAllPosts(GoogleService myService,
String blogId) throws ServiceException, IOException {
List<Entry> list = allEntry(myService, blogId);
// order older
Collections.reverse(list);
final String TAB = "\t";

Map<Entry, Map<String, Integer>> map = Support.allTerm_b(list);
Set<java.util.Map.Entry<Entry, Map<String, Integer>>> set = map
.entrySet();
Iterator<java.util.Map.Entry<Entry, Map<String, Integer>>> iterator = set
.iterator();
while (iterator.hasNext()) {
Map.Entry<com.google.gdata.data.Entry, java.util.Map<java.lang.String, java.lang.Integer>> entry = (Map.Entry<com.google.gdata.data.Entry, java.util.Map<java.lang.String, java.lang.Integer>>) iterator
.next();
System.out.println(entry.getKey().getTitle().getPlainText() + TAB + entry.getValue());
}

}

static class Support {
public static Set<String> allTerm(List<Entry> list) {
Set<String> returnSet = new HashSet<String>();
for (Entry entry : list) {

Set<Category> set = entry.getCategories();
for (Category category : set) {
returnSet.add(category.getTerm());
}

}
return returnSet;
}

public static Map<Entry, Map<String, Integer>> allTerm_b(
List<Entry> list) {
Set<String> termSet = allTerm(list);
Map<String, Integer> termMap = new HashMap<String, Integer>();
for (String string : termSet) {
termMap.put(string, 0);
}

Map<Entry, Map<String, Integer>> map = new HashMap<Entry, Map<String, Integer>>();
for (Entry entry : list) {
Map<String, Integer> temp = new HashMap<String, Integer>(
termMap);
Set<Category> set = entry.getCategories();
for (Category category : set) {
temp.put(category.getTerm(), 1);
}
map.put(entry, temp);
}

return map;
}
}

}

Blogger - 自分のブログの全ての記事の取得 2008/04/05

ある程度、いろいろ記事がたまってきたので、自分のブログ記事から、いろいろ解析できないなかぁともくろみ中です。

これから3つステップに分けてとりくもうかなと。

  1. データの収集
  2. データの解析
  3. 可視化

Javaを使ってます。

Developer's Guide: Java - Blogger Data API - Google Code

自分のブログの全ての記事の取得を行います。
以前、ブログからブログへの記事の移行を行ったことがあるので、さっくと。

で、結果の並びかえしたかったのですが、どうもドキュメントみてるとこれは、APIを使う側で処理をするというのが方針のようですね。

Result ordering is up to the implementation.
Google Data APIs Protocol Reference - Google Data APIs - Google Code


ちなみにグーグルってデータベースのようなサービスって公開していましたっけ?
スプレッドシートとかはありますけど、なんかこの勢いだとデータベースのサービスがあってもいい感じなんですが、あるのでしょうか。

それで、できたらSQLではない言語で、問い合わせできて、えーと、あっ、使ったことないけど、アマゾンのSimpleDBみたいなものでもいいかも。


package mygg;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import com.google.gdata.client.GoogleService;
import com.google.gdata.client.Query;
import com.google.gdata.data.Category;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.util.AuthenticationException;
import com.google.gdata.util.ServiceException;

public class Blogger {

public static GoogleService createGoogleService(String user, String password)
throws AuthenticationException {
GoogleService service = new GoogleService("blogger",
"deiji-blogger-app");
service.setUserCredentials(user, password);
return service;
}

public static List<Entry> allEntry(GoogleService service,String blogId)
throws IOException, ServiceException {

URL feedUrl = new URL(
"http://www.blogger.com/feeds/"+ blogId + "/posts/full");
Query query = new Query(feedUrl);

DateTime min = DateTime.parseDateTime("1999-12-31T23:59:59");
DateTime max = DateTime.now();
List<Entry> returnList = new ArrayList<Entry>();
int index = 1;// !!
do {
query.setUpdatedMin(min);
query.setUpdatedMax(max);
query.setStartIndex(index);
Feed resultFeed = service.query(query, Feed.class);
List<Entry> entries = resultFeed.getEntries();
if(!(0 < entries.size())) break;
index += entries.size();
returnList.addAll(entries);

} while (true);
return returnList;
}

public static void printAllPosts(GoogleService myService, String blogId)
throws ServiceException, IOException {

List<Entry> list = allEntry(myService, blogId);
// order older
Collections.reverse(list);
final String TAB = "\t";
for (Entry entry : list) {
System.out
.print(entry.getPublished() + TAB + entry.getId() + TAB + entry.getTitle().getPlainText());
Set<Category> set = entry.getCategories();
for (Category category : set) {
System.out.print(TAB+ category.getTerm());
}
System.out.println();

}

System.out.println();
}


}

過去の記事のほりおこし アイデアレベル 2008/02/17

せっかくBloggerにラベル(タグ)の機能があるので、さらに利用できないかなぁと思いました。
過去の記事が埋没するのをほりおこして、新しい記事と関連づけられたらよさげです。



データをキャッシュさせたり、関連記事を作成するためのルールをいろいろ拡張したりしたいので、サーバにそのロジックをもたせてもいいかなぁと画策中です。

反省です。すぐにバグだといってしまう自分へ。 2008/01/22

プログラム書いていて、すぐにバグだという人が近くにいるとげんなりしますよね。
バグはバグでもバグなので、バグなのですが、ナイーブな僕は結構気にしてしまいます。

Bloggerを使っていて、ページのタイトルが表示されなくなって、Bloggerがバグったと思いました。
そういったときの行動はすぐにグーグルさんにお伺いたてます。それでも、わからなくて、時間たってテンプレートをみましたら、「<title><data:blog.pageTitle/></title>」となっていなければいけないところが「<title><data:blog.pagetitle/></title>」となっていました。

大文字であるとこを小文字にしていたからなのでした。

おそらくどこからコピペしたのがまちがいだったのか、自分でタイプしたミスなのか。
反省です。

参考
Bloggerのページタイトルの文字化けなら。

Blogger 関連ありそうな記事のリンクをつける。 2008/01/19
2008/01/20

I saw seashells.: Bloggerに「関連記事リスト」を。
上記のサイトを参考にさせてもらっています!!

詳細に関しては、もう少しデザインとか汎用性を高めてから書きたいと思いますが、気になる方はこのページなりJavascriptなファイルなりを参照して下さい。
I saw seashells.: Bloggerに「関連記事リスト」を。


とありましたので、javascriptを拝見して、ちょこちょこと書き直して適用してみました。

参考
I saw seashells.: BloggerのLabel Feedでエラーが・・。

Blogger TIpsです。目次をつける。 2008/01/19
2008/01/19

どうもこの「プログラマメモ2」は使い勝手がよくないです。
コードの断片を残しておいてあとから、それをコピペで使いたい場合は、検索で事足りるですが、過去の記事をみて、いろいろ考えようかなぁと思うとき、ブラウジングがよくない。

少しづつ打開したいので、「目次」をつけるにチャレンジしてみました。

clmemo@aka: Blogger に目次を設置する
clmemo@aka: Blogger の目次に投稿日を表示する



ついでに何故かnextprevが表示されていないことに気がつきました。
<data:newerpagetitle/>がうまく表示されていないのです。
しかたがないので、コードはそのままにして直で表示文字を入れました。
ホーム、新しいページ、より過去のページ

<b:includable id="nextprev">
<div class="blog-pager" id="blog-pager">
<b:if cond="data:newerPageUrl">
<span id="blog-pager-newer-link">
<a class="blog-pager-newer-link"
expr:href="data:newerPageUrl"
expr:id="data:widget.instanceId + &quot;_blog-pager-newer-link&quot;"
expr:title="data:newerPageTitle">
<data:newerpagetitle />新しいページ </a>
</span>
</b:if>
<b:if cond="data:olderPageUrl">
<span id="blog-pager-older-link">
<a class="blog-pager-older-link"
expr:href="data:olderPageUrl"
expr:id="data:widget.instanceId + &quot;_blog-pager-older-link&quot;"
expr:title="data:olderPageTitle">
<data:olderpagetitle />より過去のページ </a>
</span>
</b:if>
<b:if cond="data:blog.homepageUrl != data:blog.url">
<a class="home-link" expr:href="data:blog.homepageUrl">
<data:homemsg />ホーム </a>
<b:else />
<b:if cond="data:newerPageUrl">
<a class="home-link"
expr:href="data:blog.homepageUrl">
<data:homemsg />ホーム </a>
</b:if>
</b:if>
</div>
<div class="clear" />
</b:includable>


ちょっといい加減だなぁ

Blogger クイック編集のアイコンが表示されなくなった。 2007/12/16

Bloggerです。
Bloggerを使っていて、クイック編集がブログに表示されなくなってしまいました。
クイック編集がブログの所有者以外には表示されません。
このクイック編集は記事を修正するのにワンアクションでできるのでないと困ります。

いろいろテンプレートいじったり、ClickCommentを導入したりしたので、それの影響かなぁと考えていますが、原因はいまのところわかりません。

調査中です。
とりあえずの応急処置ができたのでそれの紹介です。
みつけた場所は、Quick edit icon is gone - Something Is Broken | Google グループです。

If you cannot see ANY quick edits (like the ones for the
widgets themselves, not just the post one) then it can be something on
your side. 3rd party cookies being blocked, referrer headings being
blocked, etc.
http://help.blogger.com/bin/answer.py?answer=42231


とりあえず、応急処置のコードをブログにアップしている方がいたので、それを利用してみました。

tester: Corrected Post Quick Edit Widget

僕の場合の入れた箇所は、



表示された



いろいろためして、だめでしたら上記の方法を試してみるのもありかもです。
しかし、おそらく自分で適当にテンプレートいじってるせいなのかなぁという気もしますが。。。

bloggerのテンプレートを小さくしてみました。 2007/12/06

bloggerです。

bloggerのテンプレートをいろいろ触っていて、ごちゃごちゃしてきたので、シンプルなものからデザインをしていこうと試しています。

bloggerのテンプレートを小さくしてみました。

まず、記事を入れるwidgetのBlog1は必要なようです。
これだけでいいようですが、これだとページ要素(page elements)で部品のはったりする画面がでてこなくなるので、sectionのsidebarはあったほうがいいようです。

この状態から、必要なものつけくわえてデザインしていく方向でいこうと思います。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html expr:dir='data:blog.languageDirection' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
<head>
<b:include data='blog' name='all-head-content'/>
<title>
<data:blog.pagetitle/>
</title>
<b:skin><![CDATA[]]></b:skin>
</head>

<body>
<b:section class='main' id='main' showaddelement='no'>
<b:widget id='Blog1' locked='true' title='Blog Posts' type='Blog'/>
</b:section>
<b:section class='sidebar' id='sidebar' preferred='yes'/>
</body>
</html>

bloggerの記事のtitleを変えて表示したい、例えばXXX:記事タイトルという形式をやめたいということ 2007/12/03

bloggerについてです。

観察していて、どうもbloggerのタイトル(headのtitleです)で表示される字句の順番が、よくないような気がしたのでした(自分とあわないという意味)。

mainのページであれば、単純にブログ名がでているだけでいいのですが、各記事ページにいった場合に

ブログ名:記事名


となるようです。
テンプレートでは
<title><data:blog.pageTitle/></title>

となっています。

どうも、このdata:blog.pageTitleでブログ名:記事名となっているようですが、好みとしては、記事名-ブログ名という感じにしたいなぁと思ったわけです。

いろいろ調べると、SEO対策で、metaキーワードを入れ込むテクニックとあわせてタイトルを変えるという試みをしているところがちらほらありました。

ただ、そういったところでもブログ名:記事名の形を変えてませんでした。

Changing the Blogger Title Tag ~ Widget-based

このブログで紹介されていたやり方だと、もう少し柔軟に記事ごとのタイトルを変更できそうです。

<!-- Start Widget-based: Changing the Blogger Title Tag -->
<b:if cond='data:blog.pageType == "item"'>
<b:section id='titleTag'>
<b:widget id='Blog2' locked='false' title='ブログの投稿' type='Blog'>
<b:includable id='nextprev'/>
<b:includable id='backlinks' var='post'/>
<b:includable id='post' var='post'><data:post.title/></b:includable>
<b:includable id='commentDeleteIcon' var='comment'/>
<b:includable id='status-message'/>
<b:includable id='feedLinks'/>
<b:includable id='backlinkDeleteIcon' var='backlink'/>
<b:includable id='feedLinksBody' var='links'/>
<b:includable id='postQuickEdit' var='post'/>
<b:includable id='comments' var='post'/>
<b:includable id='main' var='top'><title><b:loop values='data:posts' var='post'><b:include data='post' name='post'/></b:loop> - <data:blog.title/></title></b:includable>
</b:widget>
</b:section>
<b:else/>
<title><data:blog.pageTitle/></title>
</b:if>
<!-- End Widget-based: Changing the Blogger Title Tag -->


わかりづらい例ですが、変更前、変更後のキャプチャです。





ブログ名が後ろについているのがわかります。

しかし、この方法を実践するには、ちょっと複雑すぎるのではないかなぁと思います。
この方法とった場合、このコードをテンプレートから削除するときに、bloggerからウィジット消すけどよいか?というふうに聞かれます。

一応、自己責任で...

blogger API 本日の投稿だけ取得 2007/10/07

blogger APIです。

Blogger Data API Developer's Guide

記事の取得に関してのサンプルがほとんどサンプルないような気が...

DateTimeにsetDateOnlyしたほうがよいようです。
もっと他の方法知りたいところです。

みつからないとnullを返すという仕様にしてみました。


/**
* <p>
* 本日、発行されたpostを一件だけ取得します。ですので、目的のものがみつかるという保証はありません。
* </p>
*
* @param myService
* @param blogId
* @return
* @throws ServiceException
* @throws IOException
*/
public static Entry getTodayPublishedPost(GoogleService myService,
String blogId) throws ServiceException, IOException {
DateTime startTime, endTime;
startTime = DateTime.now();
endTime = DateTime.now();

startTime.setDateOnly(true);

URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogId
+ "/posts/default");
Query myQuery = new Query(feedUrl);
myQuery.setPublishedMin(startTime);
myQuery.setPublishedMax(endTime);
Feed resultFeed = myService.query(myQuery, Feed.class);

if (resultFeed.getEntries().size() == 0)
return null;

return resultFeed.getEntries().get(0);
}


追記
本当に正しく動いているかどうか自信がない。
で、下記のコードに変更

/**
* <p>
* 本日、発行されたpostを一件だけ取得します。ですので、目的のものがみつかるという保証はありません。
* </p>
*
* @param myService
* @param blogId
* @return
* @throws ServiceException
* @throws IOException
*/
public static Entry getTodayPublishedPost(GoogleService myService,
String blogId) throws ServiceException, IOException {
DateTime startTime, endTime;

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);

startTime = new DateTime(calendar.getTime());

calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
endTime = new DateTime(calendar.getTime());

URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogId
+ "/posts/default");
Query myQuery = new Query(feedUrl);
myQuery.setPublishedMin(startTime);
myQuery.setPublishedMax(endTime);
Feed resultFeed = myService.query(myQuery, Feed.class);

if (resultFeed.getEntries().size() == 0)
return null;

return resultFeed.getEntries().get(0);
}

blogger bマークのボタンと被ブックマーク数を表示するための準備 2007/08/04

シナリオ:

bloggerではてなブックマーク(はてブ)のbマークボタンと、被ブックマーク数を表示したい。



コードは下記のものを上記のリンクを参考にテンプレートに入れてみました。

bマークボタン
<!-- HATEBU -->
<a expr:href='"http://b.hatena.ne.jp/add?mode=confirm&amp;url=" + data:post.url + "&amp;title=" + data:post.title'>
<img alt='このエントリーを含むはてなブックマーク' height='12' src='http://deiji.jp/images/entry.gif' style='padding:0 0 0 0; margin: 0 0 0 0; border: none;vertical-align: bottom;' width='16'/>
<!-- HATEBU END -->


はてブの被ブックマーク数
<!-- HATEBU -->
<a expr:href='"http://b.hatena.ne.jp/entry/" + data:post.url' target='_blank' title='このエントリーを含むはてなブックマークを表示'>
<span class='hatena-counter' expr:style='"background-repeat: no-repeat; background-attachment: scroll; background-position: left center; margin:0pt 0pt 0pt 0pt; padding: 15px; background-image: url(http://b.hatena.ne.jp/entry/image/" + data:post.url + ")"'/> </a>
<!-- HATEBU END -->