2016年5月30日 (月)

Feedlyで自分のブログの登録人数を調べる

しばらく更新していませんが、いろいろ書きたいネタはあるんですが、長くなりそうで、なかなか時間が取れないので小ネタを放出しておきます。

おかげ様で当ブログも100人を超えるFeedlyの登録者があるようなのですが、Feedlyの仕様上、登録者数はけっこう調べるのが面倒くさい。

Feedlyで表示される登録者数は、Feedlyに登録した時点の数字が更新されることなくずっと残るので、最新の人数が知りたいときはFeedlyにブログを追加する手順で自分のブログのURLを検索すると、検索結果に登録者数付きで表示されるのでこれをメモっていたんですが、今日やってみると人数が表示されなくなっている。どうもFeedly Cloud APIの次期バージョンの公開が近いから、いろいろ中身をいじっているものと推定される。

困ったのでグーグル先生にお伺いを立てると、スタックオーバーフローによい回答があった。

http://blog.shonanshachu.com/というブログをやっている人が回答してるようで、例ではそのブログのフィードのURLになっていますが、これ多分FeedlyのCloud APIを叩いているみたいですが、要はhttp://cloud.feedly.com/v3/feeds/feed%2Fhttp%3A%2F%2Fの後の部分に自分のブログのRSSフィードが出てくるURLをちゃんとエスケープして入れてやればいいようです(つまりスラッシュを%2Fにする)。

これを当ブログ用に多少修正してみると、以下の様になりました。

http://cloud.feedly.com/v3/feeds/feed%2Fhttp%3A%2F%2Fhennohito.cocolog-nifty.com%2Fblog%2Findex.rdf

http://cloud.feedly.com/v3/feeds/feed%2Fhttp%3A%2F%2Fhennohito.cocolog-nifty.com%2Fblog%2Fatom.xml

2つあるのはRSSのフィードがRDF形式のものとATOMの物とあり、どちらで登録しているかはユーザー次第なので両方合わせた数が登録者の合計になるためです。

回答ではcurlコマンドしていますが、別にURLを直接Chromeで開いても、JSONかなんかのアウトプットが表示されて、subscribersの部分に登録者数がみれました。

という訳で、記事執筆時ではRDFが18人、ATOMが104人で合計122人の登録があるようです。ありがとうございます。更新できていないのに、登録が増えているので、ポチポチがんばって更新していきたいと思います・・。

続きを読む "Feedlyで自分のブログの登録人数を調べる" »

2014年9月 7日 (日)

Pythonでココログのサイトマップから全文配信のRSS1.0を作ってみた。

256pxrssfeedsvg1

ココログの管理画面では全文でのRSS配信が出来そうなインターフェイスがある割には、トップページの記事数の制限(99まで)があったりして、実は出来なかったりします。

なんか、Yahoo pipeとかいろいろとサービスがあるようですが、当方が試したところ全滅でした。

というわけで、むりやりサイトマップから作ってしまったらどうだろうと思いPythonでちょこちょこやってみました。

feedformatter というATOMやRSS1.0、RSS2.0へのフォーマットが簡単に得られるライブラリがあったので、pip installして使ってみましたが、チュートリアルがあったのでとっても簡単に変換できました。

あとBeautifulSoupが本当に使いやすい。jQueryよりも好きだ。

まあ、簡単だった理由は自分のブログだけに特化してやっつけで作ったからなため、ココログ以外ではこのままでは動きませんし、ココログでもブログテーマが違うとダメかもしれません。

フォーループのところで、BeautifulSoupでメタデータを無理矢理拾っている部分はブログによって変更が必要です。ChromeならF12を押してHTML要素を解析できるので、メタデータを拾うのに使えそうなタグを自分でみつけて適当に変更してください。

また、サーバーに負荷がかかりますので、まずは記事を一つだけダウンロードして、そのhtmlファイルへのパスがfpとして、

soup = BeautifulSoup(open(fp).read())

として読み込んでメタデータの抽出が適性にできるまでオフラインで十分にテストして本番は一回で済むようにお願いします。

スクリプトで連続ダウンロードはあまり行儀が良くないですし、機械的なダウンロードが続くと強制で接続が切られます。

また、下のコードでは全文配信ではなく、800文字に制限しています。全文に変更するのは簡単だと思いますが、最終的に1MBを超えた場合、ファイルがココログにアップロードできませんので注意しましょう。

ここまでの説明がよくわからない人はココログのサーバーに迷惑になってしまう可能性があるので使用をお控えください。

Pythonコード

以下のコードの使用は自己責任で行ってくださいね。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib2, time
from bs4 import BeautifulSoup
from feedformatter import Feed 

u'''
サイトマップからRSS1.0のフィードを作成します。
https://code.google.com/p/feedformatter/wiki/Tutorial
にココログ用にちょっと手を加えただけです。
'''

# サイトマップのURLからスープを作る。
SiteMmapURL = 'http://ブログのサブドメイン.cocolog-nifty.com/blog/sitemap.xml'
soup = BeautifulSoup(urllib2.urlopen(SiteMmapURL).read())
soup.findAll('loc')

# Create the feed
feed = Feed()

# Set the feed/channel level properties
feed.feed["title"] = "Python generated test RSS feed"
feed.feed["link"] = r"http://ブログのサブドメイン.cocolog-nifty.com"
feed.feed["author"] = u"名前"
feed.feed["description"] = u"サブタイトルなど"

n_char = []
FeedURLs = [s.contents for s in soup.findAll('loc')]
# 最初のURLはブログのURLなのでスキップ。
# 最後の一つもブログではなく、ウェブページだったのでスキップ。
for n, [url] in enumerate(FeedURLs[1:-1]): # ここの数字はサイトマップをよく見て変更する。
    soup = BeautifulSoup(urllib2.urlopen(url).read())
    print n, url

    # Create an item
    item = {}

    item["title"] = soup.find('h3').contents[0]
    item["link"] = guid = url
    description = soup.find(attrs={'class':'entry-body-text'}).text
    print len(description)
    n_char.append(len(description))
    item["description"] = description[:800] # 最初の800字のみ。
    #ココログでは1アップロードあたり1MBを超える容量のファイルをアップロードすることはできません。

    # フッダーの形式: 2014年8月31日 (日) パソコン・インターネット | 固定リンク 
    txt = soup.find('span', attrs={'class' : 'post-footers'}).text.split('(')[0]
    year, rest = txt.split(u'\u5e74') # 年
    month, rest = rest.split(u'\u6708') # 月 
    date = rest.split(u'\u65e5')[0] # 日
    buf = '%d/%d/%d' % (int(year), int(month), int(date))
    item["pubDate"] = time.strptime(buf, "%Y/%m/%d")

    # Add item to feed
    # You can do this as many times as you like with multiple items
    feed.items.append(item)

feed.format_rss1_file('all_feeds.xml')  # rdf can not be opened in browser.

続きを読む "Pythonでココログのサイトマップから全文配信のRSS1.0を作ってみた。" »

2013年12月 8日 (日)

ココログフリーの記事の下にZenbackつけてみた。

直帰率が80%の当ブログは、どうにか一見さんに他のページも読んでいただけるように努力中です。直帰率って最初訪れたページから他の記事は読まずに去っていく率のことらしく、80%はかなり高いらしいです。高いほうがいいのかとずっと喜んでいたのに。

以前に、「LinkWithinでココログで簡単におすすめの関連記事をフッダーに表示する」なんて記事をかいたんですが、LinkWithinは画像付きのおすすめ記事を記事の下の方に自動で表示してくれてなかなか簡単で見栄えも良く助かっていたんですが、どうしても推薦記事の精度がよくないままだったので、とうとう先日外しました。英語の記事ならちゃんと動くのでしょうけど日本語の文章は苦手なようです。

似たようなサービスで日本語に強いのが欲しいとこなんですが、Zenbackしかカッコイイのがみつかりません。しかし、残念ながらZenbacknの公式サイトにある「ココログでのzenback利用方法」という記事によるとココログフリーでは記事の下へ表示するウィジェットはサポート外でサイドバーに表示するしかないのだそうです。

私の場合、ココログフリーではなく広告ライトオプションを使っていますが、ココログからの広告が表示されないだけでココログフリーと実質同じないので、「上級者テンプレート」がつかえません。

ただ、おかしいな?と思ったのはLinkWithinではjavascriptを「ブログのサブタイトル(キャッチフレーズ)」の設定からHeaderに入れるだけであとは自動でやってくれていたので、技術的には出来るはずなんです。まあ、大人の事情でサポート対象外なだけだと思います。

ということで、サポート外なら自分でやってみようかなぁとJQueryをつかって試してみたらできちゃいました。さすがに推薦記事の精度は高いですね。広告挿入されるのがただなのでやむなしとは言え目立つなぁ。

ココログでJQueryをつかってZenBackウィジェットを記事の下に表示する方法

といってもフッターの下にZenbackのウィジェットが表示されるようにpostedというクラスをセレクターで指定してappendでZenbackのコードを挿入しただけなんで、なんてことはないですが、ただ挿入するコードが長いので改行の扱いにちょっと苦労しました。

$(function() {

    $('.posted').append('\
    <!-- X:S ZenBackWidget -->\
    <div id="zenback-widget-loader"></div>\
    <script type="text/javascript">\
        !function(d,i){\
            if(!d.getElementById(i))\
            {var r=Math.ceil((new Date()*1)*Math.random());\
                var j=d.createElement("script");j.id=i;j.async=true;\
                j.src="//w.zenback.jp/v1/?base_uri=http%3A//あなたのサイトのURL/&nsid=XXXXXXXXXX%XX%XXXXXXXXXXXXXXXX&rand="+r;\
                d.body.appendChild(j);\
            }\
        }\
        (document,"zenback-widget-js");\
    </script>\
    <!-- X:E ZenBackWidget -->\
    ');

});

なんて内容でUTF-8のエンコーディングでloadzenback.jsとか適当に名前をつけて保存、これを自分のココログにアップロードして、ファイルへのパスを確認し、これを「ブログのサブタイトル(キャッチフレーズ)」の設定から

<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="http://あなたのサイト.cocolog-nifty.com/blog/loadzenback.js" type="text/javascript"></script> 

てな感じで読み込んでやると動きました。

ちなみにJQueryをつかったこの方法は強力で、ココログフリーではカスタマイズできないテンプレートのCSSもセレクターで指定してcssを変更することが可能です。例えば上のappendの後に

$('.sidebar').css("padding","0px")

でサイドバーの余白をなくして300pxの広告がちゃんと切れずに表示できるようになりました。同じことをデザインから「カスタムCSSを編集」からやるとダメなんですけどね。idとかクラスはテンプレートによって異なるかもしれないので注意してください。

さらに「トップへ戻るボタン」とか上のナビゲーションメニューとかもJQueryで付けました。うむ、JQueryは最高だ。

続きを読む "ココログフリーの記事の下にZenbackつけてみた。" »

2013年11月26日 (火)

ココログのアクセス解析ログのダウンロードお助けアプリ作ってみた。

公式の方でアナウンスがありましたが、12月3日から新しいアクセス解析が導入されるということですが、注意したいのは

現在のアクセス解析のデータは新アクセス解析には引き継がれません。

ということで、ダウンロード期間中の2013年11月18日~2014年2月28日の間に現在のアクセス解析のログをダウンロードしておかないと見れなくなってしまう訳です。

ログはエクセルファイルで「アクセス推移」、「ページ別アクセス数」、「リンク元ページ」、「検索サイト」、「検索ワード」、「検索フレーズ」の各ページがあって詳しく充実してるのでダウンロードおすすめです。私の場合、これで2009年から現在までのログが一分くらいでダウンロード出来ました。眺めるみると、ブログ初めたばかりの時はアクセス数10を切っていた日がザラ。二桁が当たり前になるまでに3ヶ月。アクセス数平均100を超えるまで一年以上。

だたし、ひと月ごとのダウンロードになるので、長くブログをやっているとなかなか全部ダウンロードするのが大変です。

そこで、Pythonでちょっとしたスクリプトを書いて見ました。また、調子に乗ってPythonがインストールされてなくとも使えるようにグラフィカルインターフェイス版を実行ファイルとしてパッケージ化してみました。

ココログアクセス解析自動ダウンロードスクリプトの使い方。

Pythonの2.7で書いています。Python2.7をインストールする必要があります。

レジストリを汚したくない人はPortable Pythonという手もあります。ただし、NumPy, SciPy, Matplotlib, PyWin32, Django, PIL, wxPython, PyQt, PyGameなどがついてくるのでダウンロードサイズが大きめなので、普通に公式のPython 2.7.6 Windows Installer公式サイトからダウンロードするのがおすすめです。

「dl.py」をダウンロード

Pythonのインストールが終わったら、下のスクリプトをテキストエディターにはっつけるか、上のリンクからダウンロードして、最後の方のtextとurlの変数をココログの管理者ページのアクセス解析のページ(http://app.f.cocolog-nifty.com/t/app/control/stats)をリロードしてからソースコードを見て、変更します。リロードは最新のセッション情報をスクリプトに渡してやるために重要です。

アクセス解析のページにいって、「ブログ/マイフォトを選択」のところで自分のブログを選んでから、ページを右クリックして、ウェブページのソースコードを表示します。

Access_3

ソースの174行目にtdダグで囲まれた沢山のselectダグのある行があると思います。これがtextに渡す文字列になるので、一行全部コピペしてください。この情報からダウンロードする年・月の情報を抜き取っています。次に、urlにはソースの156行目にあるlocation.hrefのダブルクォーテーションで囲まれた内容をコピペしてください。

最後にダウンロード先のフォルダをdestinatioin変数に指定します。フォルダが存在しないとエラーになりますので、先にフォルダを制作してください。この時、スラッシュの数に気をつけてください。例えば、C:\Users\hennohito\Dropbox\access_logというフォルダに保存する場合 destinatioin=r'C:\Users\hennohito\Dropbox\access_log'としてrをクォートの前に付けるか、destinatioin='C:\\Users\\hennohito\\Dropbox\\access_log'としてスラッシュを2つ書いてください。

完成した内容をdl.pyとして保存します。実行するには色々なやり方がありますが、簡単なのはC:\Python27からpython.exeというファイルを見つけます。このファイルにさっき保存したdl.pyをドラッグしてやれば実行出来ます。

バージョンアップのお知らせ。いくつかのファイルがうまく開けないエラーがありました。解決策として、サーバーに負荷かけないように、10秒のウェイトを入れておきました。それから、範囲でも指定したり、エラーになった月だけ手作業で指定するオプションもつけました。ifやelifのあとの数字を0から1にするとオプションのオン・オフができます。0でオフ、0位外はオンです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  dl.py
#  
#  Copyright 2013  <http://hennohito.cocolog-nifty.com/>
#  
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#  
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#  MA 02110-1301, USA.
#  
#  
import multiprocessing, os, Queue, time, urllib2 # standard library

def DL(YearMonth, url, destinatioin):
    fp = os.path.join(destinatioin, YearMonth+'.xls')
    f = urllib2.urlopen(url + YearMonth)
    with open(fp, 'wb') as xls:
        xls.write(f.read())


class Worker(multiprocessing.Process):
    ''' http://jeetworks.org/node/81 
        modified from the 2nd example in the comments '''

    def __init__(self, work_queue, url, destinatioin):

        # base class initialization
        multiprocessing.Process.__init__(self)

        # job management stuff
        self.work_queue = work_queue
        self.kill_received = False

        self.url = url
        self.destinatioin = destinatioin

    def run(self):
        while not self.kill_received:

            # get a task
            try:
                n_job, YearMonth = self.work_queue.get_nowait()
            except Queue.Empty:
                break

            # the actual processing
            print("Starting " + str(n_job+1) + " ... " + YearMonth)
            DL(YearMonth, self.url, self.destinatioin)
            time.sleep(10)


if __name__ == '__main__':
    work_queue = multiprocessing.Queue()

    if 1:
        # 年月指定オプション1 ソースから全部抜き取る
        # ソースの174行目 http://app.f.cocolog-nifty.com/t/app/control/stats
        text = '<td><select name="dl_ym" id="dl_ym"><option value="201310">2013年10月</option><option value="201309">2013年09月</option><option value="201308">2013年08月</option><option value="201307">2013年07月</option><option value="201306">2013年06月</option><option value="201305">2013年05月</option><option value="201304">2013年04月</option><option value="201303">2013年03月</option><option value="201302">2013年02月</option><option value="201301">2013年01月</option><option value="201212">2012年12月</option><option value="201211">2012年11月</option><option value="201210">2012年10月</option><option value="201209">2012年09月</option><option value="201208">2012年08月</option><option value="201207">2012年07月</option><option value="201206">2012年06月</option><option value="201205">2012年05月</option><option value="201204">2012年04月</option><option value="201203">2012年03月</option><option value="201202">2012年02月</option><option value="201201">2012年01月</option><option value="201112">2011年12月</option><option value="201111">2011年11月</option><option value="201110">2011年10月</option><option value="201109">2011年09月</option><option value="201108">2011年08月</option><option value="201107">2011年07月</option><option value="201106">2011年06月</option><option value="201105">2011年05月</option><option value="201104">2011年04月</option><option value="201103">2011年03月</option><option value="201102">2011年02月</option><option value="201101">2011年01月</option><option value="201012">2010年12月</option><option value="201011">2010年11月</option><option value="201010">2010年10月</option><option value="201009">2010年09月</option><option value="201008">2010年08月</option><option value="201007">2010年07月</option><option value="201006">2010年06月</option><option value="201005">2010年05月</option><option value="201004">2010年04月</option><option value="201003">2010年03月</option><option value="201002">2010年02月</option><option value="201001">2010年01月</option><option value="200912">2009年12月</option><option value="200911">2009年11月</option><option value="200910">2009年10月</option><option value="200909">2009年09月</option><option value="200908">2009年08月</option><option value="200907">2009年07月</option><option value="200906">2009年06月</option><option value="200905">2009年05月</option><option value="200904">2009年04月</option><option value="200903">2009年03月</option><option value="200902">2009年02月</option></select></td>'
        YearMonths = [_[2:8] for _ in text.split('value')[1:]]
    elif 0:    # 年月指定オプション2 ほしい範囲で指定
        StartYM, EndYM = '200902', '200904'
        StartY, EndY = int(StartYM[:4]), int(EndYM[:4])
        StartM, EndM = int(StartYM[4:]), int(EndYM[4:])
        YearMonths = []
        for Y in (range(EndY-StartY+1)):
            if Y == 0:
                _StartM = StartM
            else:
                _StartM = 1
            if Y == EndY-StartY:
                _EndM = EndM+1
            else:
                _EndM = 12+1
            for M in range(_StartM, _EndM):
                print "%d%02d" % (StartY + Y, M)
                YearMonths.append( "%d%02d" % (StartY+Y, M) )
    elif 0:   # 年月指定オプション3 エラーになったのものだけ手作業で。
        YearMonths = ['200903', '200905' ]

    for n, YearMonth in enumerate(YearMonths):
        work_queue.put( (n, YearMonth) )
    print "Total %d jobs found" % (n+1)

    # ソースの156行目 http://app.f.cocolog-nifty.com/t/app/control/stats
    url = "http://ax24.a.cocolog-nifty.com/bin/dl?ud=xxxxx.cocolog-nifty.com&bid=bxxxxxxxx&sk=xxxxxxxxxxxxxxxxxxxxxxxx&ym="
    destinatioin = r"C:\access_log" # 存在するフォルダのみ指定可能。
    for _ in range(multiprocessing.cpu_count()):
        worker = Worker(work_queue, url, destinatioin)
        worker.start()

ココログアクセス解析自動ダウンロードアプリの使い方。

Dlgui

ファイルサイズが5.9MBで1MB以上あるので、ココログにはアップできませんでした。そこでhotfile.comというサービスにアップしたので、次のリンクからダウンロードしてください。zipなので適当に解凍して、出てきたexeファイルを実行してください。

ココログアクセス解析自動ダウンロードアプリのダウンロードリンク

簡単に書きますので、わからない場合上に書いたスクリプトの使い方を見てもらえば、解決すると思います。

最初のパラメータはブログのURLです。赤枠のところを自分のブログのものにしてください。次に、アクセス解析ページで「ブログ/マイフォトを選択」で自分のブログを選んでからウェブサイトのソースページをみて、156行目にあるbidとskというパラメータを見つけてください。これが2つめ3つめの値になります。

あとは初めの月と終わりの月を例に習って入力し、[ダウンロード先フォルダ選択]ボタンからダウンロード先を選びます。で、[ダウンロード開始]ボタンでダウンロードが始まります。

GUI版のソースコードも参考までにおいておきます。

「cocolog_access_DL.py」をダウンロード

続きを読む "ココログのアクセス解析ログのダウンロードお助けアプリ作ってみた。" »

2013年1月31日 (木)

ココログでpygmentsを使ってコードのハイライト

from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

def py2htmlcss(codeblock, basename='test', style='monokai'):
    
    with open(basename+'.html', 'w') as htmlfile:
        highlight(codeblock, PythonLexer(), HtmlFormatter(), htmlfile)

    with open(basename+'.css', 'w') as cssfile:
        CSS = HtmlFormatter(style=style).get_style_defs('.highlight')
        cssfile.write(CSS)

Pythonのライブラリであるpygmentsで出てきたHTMLとCSSを使ってココログに綺麗にコードを貼っつけるtestです。ハイライトされてない。。。

追記。そうか、HtmlFormatter(full=True)でフルオプションを指定して、スタイル指定を含んだHTMLを出力して、スタイルの部分をブログのサブタイトル(キャッチフレーズ)の部分に埋め込めばいいのか。(紆余曲折しましたが、ちゃんとカスカムCSSからできました。)

追記2。pygmentize.exeを使えば、こんなコード書かなくともよいのですね。まだmonokaiの背景色のグレーっぽい色が来ないなぁ。

追記3 HtmlFormatter(style='monokai')でmonokaiを指定すべきところ、あほでHtmlFormatter().get_style_defs('.monokai')なんてやっていたのでCSSに.monokaiというクラスの定義で60行できて、HTMLの方ではクラス名がデフォルトのhighlightになっているのがうまくいかない原因だった。

まとめ

普通はpygmentize.exeでやるのかもしれませんが、出てくるCSSが.hll { background-color: #49483e }からはじまっていて、.highlightを各行の頭に追加しないとhighlightのクラスだけに有効にしたいデザインが他のところにも影響してしまいます。

上のコードでやると、そのまま使えるHTMLとCSSが出てきます。

使い方:

codeblockに整形済みテキストでコードを渡すと、basenameで指定したファイル名でtest.htmlとかtest.cssとかができます。できたcssはそのままカスタムCSSに貼っつけ、あとはhtmlの方も記事そのままはっつけます。ちゃんとHTMLの編集タブの方に切り替えてから貼っつけましょう。わかってしまえば結構、簡単。

まあSyntaxHighlighterというjavascriptのライブラリを使うのが普通かもしれませんし、ココログでも使えるようです。どっちで行くかまよったんですが、pygmentsで先にレンダリングすると変換がないのでおそらくページの読み込みが速いのと、javascriptを切っていれもちゃんと見れるあたりがちょっと利点ですね。

追記4 コードに長い行があると右端で切れてしまうのでスクロールバーを足しました。CSSにpre { line-height: 125%; white-space: pre; overflow: auto; }を追加でうまくいきました。

2012年10月25日 (木)

サイト名変更のおしらせ

2009年の2月に最初の投稿をしてから早くも3年半ちょいとなるわけですが、ブログタイトルのスペルがぐちゃぐちゃだったのを"やっつけ"とちゃんと読めるようにスペルを直しました。

なんとなく気にはなっていたのですが、グーグルでサイト名を検索してまで来るような人はいないと思ったので、放置状態。

最近google adsenseをつかって広告を表示して遊んでみているんですが、ちょうど一ケ月で大体4900アクセスくらいあったなかから、広告のクリックはなんと2つ(0.041%)!! 昨日までは1クリックだったし。それでもXXXXX円くらいの収入になるそうです。単価がおもったより高いなあ(N=2)。マネタイジング結構楽しいかも。(規約に金額書くなとあるらしいので金額については伏せました。)

と言う訳でまあ少しでもアクセスアップになるかなと色気をだして変更することにしました。

とはいえ、これからも需要のなさそうでも0じゃないようなニッチなことを書きなぐりますので、硬派なYATTSUKE BLOGをお楽しみください。

しろののツイッタータイムライン

  • ツイッターは5つ目も凍結されました。6つ目での復活も不可能。なのでnoteに注力しています。

    と思ったら、イーロン・マスクの買収が公になってアカウントが復活できました。ありがとうマスク。

    トランプ関連記事の一覧リスト

オススメたち

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

はてブ

無料ブログはココログ