8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

自前のサーバでPodcastする時のRSS作るツール(iTunes対応前提)

Last updated at Posted at 2012-04-03

正直Podcastのしくみ(というかXMLのタグ)をそこまで理解していない。
ツッコミは歓迎です。

rss.php

<?php

require_once('./mp3file.php');
require_once('./revin.php');

$fileList = my_getFilelist('mp3');
usort($fileList, "cmp");

$conf = file_get_contents('./rssconfig.tsv');
$conf = explode("\n", $conf);
foreach($conf as $val){
	list($number, $date, $subtitle, $desc) = explode("\t", $val);
	$m = new mp3file('./mp3/'.$number.'.mp3');
	$a = $m->get_metadata();

	$filesize = $a['Filesize'];
	$duration = $a['Length mm:ss'];

	$confArray[$number] = array(
		'date' => $date.' 12:00:00',
		'subtitle' => htmlspecialchars($subtitle),
		'desc' => str_replace(array("\r\n","\n","\r"), '', htmlspecialchars($desc)),
		'size' => $filesize,
		'duration' => $duration
	);
}

krsort($confArray);

// ヘッダ
$buf = <<<EOM
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">

<channel>
<title>おばけゴースト</title>
<link>http://d.hatena.ne.jp/obakeghost/</link>
<language>ja</language>
<copyright>Revin/村上裕一</copyright>
<itunes:subtitle></itunes:subtitle>
<itunes:author>Revin/村上裕一</itunes:author>
<itunes:summary>Revin(@rev84)&村上裕一(@murakami_kun)で、毎週日曜日にお送りするラジオです。気楽な話から批評的な話まで、色々と語っていきたいと思います。</itunes:summary>

<description>Revin(@rev84)&村上裕一(@murakami_kun)で、毎週日曜日にお送りするラジオです。気楽な話から批評的な話まで、色々と語っていきたいと思います。</description>
<itunes:owner>
<itunes:name>Revin</itunes:name>
<itunes:email>oniduka_takeshi@yahoo.co.jp</itunes:email>
</itunes:owner>
<itunes:owner>
<itunes:name>村上裕一</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:image href="http://rev84.sakura.ne.jp/obake/thumb.jpg" />
<itunes:category text="Talk">
</itunes:category>

EOM;

foreach($confArray as $key => $val){
	$date = date('r', strtotime($val['date']));
	$url = 'http://rev84.sakura.ne.jp/obake/mp3/'.$key.'.mp3';

	$buf .= <<<EOM

<item>
<title>おばけゴースト 第{$key}話「{$val['subtitle']}」</title>
<itunes:author>Revin/村上裕一</itunes:author>
<itunes:summary>{$val['desc']}</itunes:summary>
<enclosure url="{$url}" length="{$val['size']}" type="audio/mp3" />
<guid>{$url}</guid>
<pubDate>{$date}</pubDate>
<itunes:duration>{$val['duration']}</itunes:duration>
<itunes:keywords></itunes:keywords>
</item>

EOM;
}

$buf .= <<<EOM
</channel>
</rss>
EOM;

file_put_contents('./obake.rss', $buf);

function cmp ($a, $b) {
    if(preg_match('/^(\d+)/', $a, $matches)){
    	$a = $matches[1];
    } else {
    	$a = 0;
    }
    if(preg_match('/^(\d+)/', $b, $matches)){
    	$b = $matches[1];
    } else {
    	$b = 0;
    }


    if ($a == $b) return 0;
    // $a が $b より大きい場合は -1 を返し、
    // $a が $b より小さい場合は 1 を返します。
    return ($a > $b) ? -1 : 1;
}
?>

revin.php

<?php

function var_dump_file($var, $filename = './var_dump.txt'){
	if(file_exists($filename)){
		unlink($filename);
	}
	ob_start();
	var_dump($var);
	$out = ob_get_contents();
	ob_end_clean();
	file_put_contents($filename, $out, FILE_APPEND);

	return true;
}

function my_httpRequest($url, $inputArray = array()){
	$options = array('http' => array(
	    'method' => 'POST',
	    'content' => http_build_query($inputArray),
	));
	return file_get_contents($url, false, stream_context_create($options));
}

function my_getFilelist($dir){
	$files = array();

	if ($handle = opendir('./'.$dir)) {
		while (false !== ($file = readdir($handle))) {
			if($file != '.' && $file != '..' && !in_array($file, $files)){
				$files[] = $file;
			}
		}
		closedir($handle);

		return $files;
	} else {
		return false;
	}
}

?>

mp3file.php

<?php
/*
php5 class (will not work in php4)
for detecting bitrate and duration of regular mp3 files (not VBR files)
*/

//-----------------------------------------------------------------------------
class mp3file
{
    protected $block;
    protected $blockpos;
    protected $blockmax;
    protected $blocksize;
    protected $fd;
    protected $bitpos;
    protected $mp3data;
    public function __construct($filename)
    {
        $this->powarr  = array(0=>1,1=>2,2=>4,3=>8,4=>16,5=>32,6=>64,7=>128);
        $this->blockmax= 1024;
       
        $this->mp3data = array();
        $this->mp3data['Filesize'] = filesize($filename);

        $this->fd = fopen($filename,'rb');
        $this->prefetchblock();
        $this->readmp3frame();
    }
    public function __destruct()
    {
        fclose($this->fd);
    }
    //-------------------
    public function get_metadata()
    {
        return $this->mp3data;
    }
    protected function readmp3frame()
    {
        $iscbrmp3=true;
        if ($this->startswithid3())
            $this->skipid3tag();
        else if ($this->containsvbrxing())
        {
            $this->mp3data['Encoding'] = 'VBR';
            $iscbrmp3=false;
        }
        else if ($this->startswithpk())
        {
            $this->mp3data['Encoding'] = 'Unknown';
            $iscbrmp3=false;
        }
   
        if ($iscbrmp3)
        {
            $i = 0;
            $max=5000;
            //look in 5000 bytes...
            //the largest framesize is 4609bytes(256kbps@8000Hz  mp3)
            for($i=0; $i<$max; $i++)
            {
                //looking for 1111 1111 111 (frame synchronization bits)                
                if ($this->getnextbyte()==0xFF)
                    if ($this->getnextbit() && $this->getnextbit() && $this->getnextbit())
                        break;
            }
            if ($i==$max)
                $iscbrmp3=false;
        }
   
        if ($iscbrmp3)
        {
            $this->mp3data['Encoding'         ] = 'CBR';
            $this->mp3data['MPEG version'     ] = $this->getnextbits(2);
            $this->mp3data['Layer Description'] = $this->getnextbits(2);
            $this->mp3data['Protection Bit'   ] = $this->getnextbits(1);
            $this->mp3data['Bitrate Index'    ] = $this->getnextbits(4);
            $this->mp3data['Sampling Freq Idx'] = $this->getnextbits(2);
            $this->mp3data['Padding Bit'      ] = $this->getnextbits(1);
            $this->mp3data['Private Bit'      ] = $this->getnextbits(1);
            $this->mp3data['Channel Mode'     ] = $this->getnextbits(2);
            $this->mp3data['Mode Extension'   ] = $this->getnextbits(2);
            $this->mp3data['Copyright'        ] = $this->getnextbits(1);
            $this->mp3data['Original Media'   ] = $this->getnextbits(1);
            $this->mp3data['Emphasis'         ] = $this->getnextbits(1);
            $this->mp3data['Bitrate'          ] = mp3file::bitratelookup($this->mp3data);
            $this->mp3data['Sampling Rate'    ] = mp3file::samplelookup($this->mp3data);
            $this->mp3data['Frame Size'       ] = mp3file::getframesize($this->mp3data);
            $this->mp3data['Length'           ] = mp3file::getduration($this->mp3data,$this->tell2());
            $this->mp3data['Length mm:ss'     ] = mp3file::seconds_to_mmss($this->mp3data['Length']);
           
            if ($this->mp3data['Bitrate'      ]=='bad'     ||
                $this->mp3data['Bitrate'      ]=='free'    ||
                $this->mp3data['Sampling Rate']=='unknown' ||
                $this->mp3data['Frame Size'   ]=='unknown' ||
                $this->mp3data['Length'     ]=='unknown')
            $this->mp3data = array('Filesize'=>$this->mp3data['Filesize'], 'Encoding'=>'Unknown');
        }
        else
        {
            if(!isset($this->mp3data['Encoding']))
                $this->mp3data['Encoding'] = 'Unknown';
        }
    }
    protected function tell()
    {
        return ftell($this->fd);
    }
    protected function tell2()
    {
        return ftell($this->fd)-$this->blockmax +$this->blockpos-1;
    }
    protected function startswithid3()
    {
        return ($this->block[1]==73 && //I
                $this->block[2]==68 && //D
                $this->block[3]==51);  //3
    }
    protected function startswithpk()
    {
        return ($this->block[1]==80 && //P
                $this->block[2]==75);  //K
    }
    protected function containsvbrxing()
    {
        //echo "<!--".$this->block[37]." ".$this->block[38]."-->";
        //echo "<!--".$this->block[39]." ".$this->block[40]."-->";
        return(
               ($this->block[37]==88  && //X 0x58
                $this->block[38]==105 && //i 0x69
                $this->block[39]==110 && //n 0x6E
                $this->block[40]==103)   //g 0x67
/*               ||
               ($this->block[21]==88  && //X 0x58
                $this->block[22]==105 && //i 0x69
                $this->block[23]==110 && //n 0x6E
                $this->block[24]==103)   //g 0x67*/
              );  

    }
    protected function debugbytes()
    {
        for($j=0; $j<10; $j++)
        {
            for($i=0; $i<8; $i++)
            {
                if ($i==4) echo " ";
                echo $this->getnextbit();
            }
            echo "<BR>";
        }
    }
    protected function prefetchblock()
    {
        $block = fread($this->fd, $this->blockmax);
        $this->blocksize = strlen($block);
        $this->block = unpack("C*", $block);
        $this->blockpos=0;
    }
    protected function skipid3tag()
    {
        $bits=$this->getnextbits(24);//ID3
        $bits.=$this->getnextbits(24);//v.v flags

        //3 bytes 1 version byte 2 byte flags
        $arr = array();
        $arr['ID3v2 Major version'] = bindec(substr($bits,24,8));
        $arr['ID3v2 Minor version'] = bindec(substr($bits,32,8));
        $arr['ID3v2 flags'        ] = bindec(substr($bits,40,8));
        if (substr($bits,40,1)) $arr['Unsynchronisation']=true;
        if (substr($bits,41,1)) $arr['Extended header']=true;
        if (substr($bits,42,1)) $arr['Experimental indicator']=true;
        if (substr($bits,43,1)) $arr['Footer present']=true;

        $size = "";
        for($i=0; $i<4; $i++)
        {
            $this->getnextbit();//skip this bit, should be 0
            $size.= $this->getnextbits(7);
        }

        $arr['ID3v2 Tags Size']=bindec($size);//now the size is in bytes;
        if ($arr['ID3v2 Tags Size'] - $this->blockmax>0)
        {
            fseek($this->fd, $arr['ID3v2 Tags Size']+10 );
            $this->prefetchblock();
            if (isset($arr['Footer present']) && $arr['Footer present'])
            {
                for($i=0; $i<10; $i++)
                    $this->getnextbyte();//10 footer bytes
            }
        }
        else
        {
            for($i=0; $i<$arr['ID3v2 Tags Size']; $i++)
                $this->getnextbyte();
        }
    }

    protected function getnextbit()
    {
        if ($this->bitpos==8)
            return false;

        $b=0;
        $whichbit = 7-$this->bitpos;
        $mult = $this->powarr[$whichbit]; //$mult = pow(2,7-$this->pos);
        $b = $this->block[$this->blockpos+1] & $mult;
        $b = $b >> $whichbit;
        $this->bitpos++;

        if ($this->bitpos==8)
        {
            $this->blockpos++;
               
            if ($this->blockpos==$this->blockmax) //end of block reached
            {
                $this->prefetchblock();
            }
            else if ($this->blockpos==$this->blocksize)
            {//end of short block reached (shorter than blockmax)
                return;//eof
            }
           
            $this->bitpos=0;
        }
        return $b;
    }
    protected function getnextbits($n=1)
    {
        $b="";
        for($i=0; $i<$n; $i++)
            $b.=$this->getnextbit();
        return $b;
    }
    protected function getnextbyte()
    {
        if ($this->blockpos>=$this->blocksize)
            return;

        $this->bitpos=0;
        $b=$this->block[$this->blockpos+1];
        $this->blockpos++;
        return $b;
    }
    //-----------------------------------------------------------------------------
    public static function is_layer1(&$mp3) { return ($mp3['Layer Description']=='11'); }
    public static function is_layer2(&$mp3) { return ($mp3['Layer Description']=='10'); }
    public static function is_layer3(&$mp3) { return ($mp3['Layer Description']=='01'); }
    public static function is_mpeg10(&$mp3)  { return ($mp3['MPEG version']=='11'); }
    public static function is_mpeg20(&$mp3)  { return ($mp3['MPEG version']=='10'); }
    public static function is_mpeg25(&$mp3)  { return ($mp3['MPEG version']=='00'); }
    public static function is_mpeg20or25(&$mp3)  { return ($mp3['MPEG version']{1}=='0'); }
    //-----------------------------------------------------------------------------
    public static function bitratelookup(&$mp3)
    {
        //bits               V1,L1  V1,L2  V1,L3  V2,L1  V2,L2&L3
        $array = array();
        $array['0000']=array('free','free','free','free','free');
        $array['0001']=array(  '32',  '32',  '32',  '32',   '8');
        $array['0010']=array(  '64',  '48',  '40',  '48',  '16');
        $array['0011']=array(  '96',  '56',  '48',  '56',  '24');
        $array['0100']=array( '128',  '64',  '56',  '64',  '32');
        $array['0101']=array( '160',  '80',  '64',  '80',  '40');
        $array['0110']=array( '192',  '96',  '80',  '96',  '48');
        $array['0111']=array( '224', '112',  '96', '112',  '56');
        $array['1000']=array( '256', '128', '112', '128',  '64');
        $array['1001']=array( '288', '160', '128', '144',  '80');
        $array['1010']=array( '320', '192', '160', '160',  '96');
        $array['1011']=array( '352', '224', '192', '176', '112');
        $array['1100']=array( '384', '256', '224', '192', '128');
        $array['1101']=array( '416', '320', '256', '224', '144');
        $array['1110']=array( '448', '384', '320', '256', '160');
        $array['1111']=array( 'bad', 'bad', 'bad', 'bad', 'bad');
       
        $whichcolumn=-1;
        if      (mp3file::is_mpeg10($mp3) && mp3file::is_layer1($mp3) )//V1,L1
            $whichcolumn=0;
        else if (mp3file::is_mpeg10($mp3) && mp3file::is_layer2($mp3) )//V1,L2
            $whichcolumn=1;
        else if (mp3file::is_mpeg10($mp3) && mp3file::is_layer3($mp3) )//V1,L3
            $whichcolumn=2;
        else if (mp3file::is_mpeg20or25($mp3) && mp3file::is_layer1($mp3) )//V2,L1
            $whichcolumn=3;
        else if (mp3file::is_mpeg20or25($mp3) && (mp3file::is_layer2($mp3) || mp3file::is_layer3($mp3)) )
            $whichcolumn=4;//V2,   L2||L3
       
        if (isset($array[$mp3['Bitrate Index']][$whichcolumn]))
            return $array[$mp3['Bitrate Index']][$whichcolumn];
        else
            return "bad";
    }
    //-----------------------------------------------------------------------------
    public static function samplelookup(&$mp3)
    {
        //bits               MPEG1   MPEG2   MPEG2.5
        $array = array();
        $array['00'] =array('44100','22050','11025');
        $array['01'] =array('48000','24000','12000');
        $array['10'] =array('32000','16000','8000');
        $array['11'] =array('res','res','res');
       
        $whichcolumn=-1;
        if      (mp3file::is_mpeg10($mp3))
            $whichcolumn=0;
        else if (mp3file::is_mpeg20($mp3))
            $whichcolumn=1;
        else if (mp3file::is_mpeg25($mp3))
            $whichcolumn=2;
       
        if (isset($array[$mp3['Sampling Freq Idx']][$whichcolumn]))
            return $array[$mp3['Sampling Freq Idx']][$whichcolumn];
        else
            return 'unknown';
    }
    //-----------------------------------------------------------------------------
    public static function getframesize(&$mp3)
    {
        if ($mp3['Sampling Rate']>0)
        {
            return  ceil((144 * $mp3['Bitrate']*1000)/$mp3['Sampling Rate']) + $mp3['Padding Bit'];
        }
        return 'unknown';
    }
    //-----------------------------------------------------------------------------
    public static function getduration(&$mp3,$startat)
    {
        if ($mp3['Bitrate']>0)
        {
            $KBps = ($mp3['Bitrate']*1000)/8;
            $datasize = ($mp3['Filesize'] - ($startat/8));
            $length = $datasize / $KBps;
            return sprintf("%d", $length);
        }
        return "unknown";
    }
    //-----------------------------------------------------------------------------
    public static function seconds_to_mmss($duration)
    {
        return sprintf("%d:%02d", ($duration /60), $duration %60 );
    }
}
?>

rssconfig.tsv

43	2012-04-01	今までありがとう	ふつおた/レビズバッ!『東京電力:大口向け電気料金を1日から値上げ』『息子の東大受験失敗で「お母さんも東大目指そうかな」→母親合格、息子は2度目も失敗し私大へ』『猫ひろしさん五輪代表、カンボジアの反応は…』『JRも「さぬきうどん駅」に変更…駅に愛称表示』
42	2012-03-25	久々の公録	ふつおた/レビズバッ!『「ステーキけん」井戸社長 「ニートが道路を歩く権利は無い」』『野田首相 消費税増税法案「命をかける」』『米グーグル:検索予測差し止め命令 東京地裁仮処分』『前田敦子さんがAKB卒業を発表「ハタチの夢に歩き出さなきゃ」』
41	2012-03-18	元気のない二人	ふつおた/レビズバッ!『福島産のお土産が帰りのSAのゴミ箱に大量に捨てられている』『維新の会、遺産全額徴収を検討…』『グリー、15歳以下のゲーム課金を月5000円に制限 RMTも禁止へ』『評論家で詩人の吉本隆明さんが死去 戦後の思想に大きな影響』
40	2012-03-11	村上、記者会見	ふつおた
39	2012-03-04	花粉症キツすぎ	ふつおた/レビズバッ!『AIJ投資顧問 年金2千億円の大半消失…金融庁が業務停止命令』『「習ってない漢字使うな」指導で自分の名前を書けない子供も』『生活保護は現物支給へ 自民党提言』『仕事帰りの会社員癒やす「猫カフェ」、夜8時以降の営業禁止へ』
38	2012-02-26	最長記録また更新	ふつおた/レビズバッ!『違法状態「恥ずかしい」=債務危機回避へ消費増税を―民主・前原氏』『完全にマインドコントロールされたオセロ中島 「占い師」に脳のプログラム書き換えられた?』『<大阪市>市営バス運転手の給与4割削減へ 労組の反発必至』『Anonymousがネットをダウン!?』/今日のネタバレ『White Album 2(2/2)』
37	2012-02-19	ネタバレおばけや…	ふつおた/レビズバッ!『10年以上お金の出し入れない「休眠預金」を復興財源に=金融界は反対』『娘がフェイスブックの「友達」外され、父親が殺人』/今日のネタバレ『White Album 2(1/2)』
36	2012-02-12	@BotHakase よろ	ふつおた/レビズバッ!『高額賞金の「ロト7」計画=売り上げ回復へ発売検討』『水島製油所の海底トンネルで事故 作業員5人不明』『天皇陛下:心臓の精密検査のため入院へ』『ホイットニーさん急死に悲しみの声続々』
35	2012-02-05	きさ☆らぎ	ふつおた/レビズバッ!『食道がんのやしきたかじん「やめるわけないわ」引退完全否定』『各地で記録的豪雪 除雪、車両も人手も不足』『パチンコホール倒産、ピークの3分の1に 震災でも顧客マインド衰えず』『AKB脱退、平嶋&米沢「ほかのメンバーは関係ありません」』
34	2012-01-29	ふつおたの鬼	ふつおた
33	2012-01-22	再生時間で出オチ	ふつおた/レビズバッ!『ダルビッシュと紗栄子の離婚、「慰謝料5億円+月500万円の養育費」で決着か』『座礁船の船長「偶然ボートに落ちた」と供述』『芥川賞に田中、円城さん=直木賞は葉室さんが受賞』『サムスン、敗訴。アップルとのスマホ特許訴訟…ドイツ』『ロンドンオリンピックの歌手投票でK-POPを抜き初音ミクが1位に! 2位以下はK-POP続き』/今日のネタバレ『マンガルカ vol.1.0』
32	2012-01-15	※Revin酔ってます	ふつおた/レビズバッ!『広島脱走事件 逃走容疑で李容疑者を逮捕 小学校付近で身柄を確保』『「将棋電王戦」コンピュータ・ボンクラーズが米長邦雄永世棋聖に勝利』『ステマ 口コミサイト、やらせ書き込み 歯科・エステでも相次ぐ』『大学入試センター試験2日目 全ての日程を終了、今のところトラブルの報告なし』
31	2012-01-08	シュタゲよかった	ふつおた/レビズバッ!『為替:消費税10%が嫌われる?一部で増税を嫌気した円売り観測』『やらおんがステマだと話題』/今日のネタバレ『シュタインズ・ゲート』
30	2012-01-01	来年もよろしく	2011年冬コミの様子
29	2011-12-25	来年もよろしく	ふつおた/レビズバッ!『金正日総書記が死去 北朝鮮の最高指導者』『ウィニー開発者の無罪確定へ=ほう助罪の成立認めず―検察側の上告棄却・最高裁』『東野圭吾さんら作家7名がスキャン代行業者2社を提訴――その意図』『志倉千代丸とつんくが共同プロデュース!「AKIHABARAバックステージpass」が秋葉原にオープン』
28	2011-12-18	先週はメンゴ	ふつおた/レビズバッ!『映画「けいおん!」 初動ヱヴァ序超えの大ヒット ネットで話題に』『<受動喫煙防止>市町村初の条例案を否決 千葉県流山市』『PlayStation Vitaが発売したゾー! 発売カウントダウンイベントで販売開始』『急増する20代の就職失敗自殺・生活苦自殺・失業自殺-若者の死因トップが自殺なのは先進国で日本だけ』『今年の漢字は「絆」=震災、なでしこなど反映―漢検協会』
27	2011-12-04	師走の翁	ふつおた/レビズバッ!『大阪市長選で橋下氏、府知事選で松井氏が当選』『無許可でアニメ映像をネットに流す 容疑の会社員逮捕』『プレイ動画投稿は示談金支払いで決着 「徹底抗戦」したゲームメーカー』『ツイッターフォロワー販売会社好調』
26	2011-11-27	おめでとう	ふつおた/レビズバッ!『皮膚が溶け、肉が腐って骨が見え死に至る、劇・危険合成麻薬「クロコダイル」の恐怖』『訃報:落語家の立川談志さん死去、75歳』『東電 「放射性物質は東電の所有物ではない。したがって東電は除染に責任をもたない」』『ミクシィ、“ユーザー激減”に反論 ネット調査会社に説明求める』/今日のネタバレ『新世紀エヴァンゲリオン』
25	2011-11-20	村上、課金廃人に?	ふつおた/レビズバッ!『受信契約結ばぬ一般世帯を初提訴 NHK』『動物擁護団体PETA、「マリオ」の“タヌキスーツ”に抗議運動』『ソフトバンクがNTT東西を提訴 光ファイバーの事業者間貸出方法が法律違反として』
24	2011-11-13	TPP交渉参加	ふつおた/レビズバッ!『野田首相、TPP交渉参加方針を正式表明』『偽札作りを「ニコニコ動画」で実況中継 激怒の財務省が警察に通報』『天皇陛下、退院を見合わせ』『オンラインゲーム「M2 -神甲綺譚-」、メンテ失敗データ全消去→サービス終了』
23	2011-11-06	ネタバレ地獄	ふつおた/レビズバッ!『野田首相、消費税10%を「国際公約」』『洪水でバンコク日本人学校2千人が一時帰国』/今日のネタバレ『Fate/Zero』『真剣で私に恋しなさい!』
22	2011-10-30	TPPって何やねん	ふつおた/レビズバッ!『野田首相、TPP交渉参加の意向固める』『モバゲー11・4発表…球団名「横浜DeNAベイスターズ」か』『ワンセグ搭載機器にも支払いが義務付けられるNHKの受信料。その根拠は?』『「6+5×3=33」と答える就活生続出 学力低下ひどく、採用担当者不安』『ミュージックレイン、人気声優の交際を報じたストーカーブログに対する法的措置』『アマゾンの契約書に激怒する出版社員 国内130社に電子書籍化を迫る』
21	2011-10-23	冬コミに何出そう…	ふつおた/レビズバッ!『カダフィ大佐は頭部への銃弾で死亡、首相が検視結果を発表』『橋下知事が辞職願提出 市長選くら替え出馬へ』『「キログラム」を再定義へ=分銅基準を見直し―国際度量衡総会』『みのもんた、ラジオで“引退”を全面否定「編集がよくない」」』
20	2011-10-16	もう10月も半ばか…	ふつおた/レビズバッ!『AKBの姉貴分SDN48、来年3月で全員卒業へ』『限定復活のZONEが活動継続を宣言』『恐慌回避、欧州崖っぷち G20 包括策、23日首脳会議期限』『米大学の授業料も6割引に! 急成長のグルーポン、早くも曲がり角?』『政府試算、共通番号費用5000億円 27年導入』
19	2011-10-09	iGhost4S	ふつおた/レビズバッ!『「タイムマシン可能」ニュートリノ実験結果に専門家ら驚き』『国家事業から民間へ。760万円で行ける最新宇宙旅行事情』『前アップルCEO、スティーブ・ジョブズ氏死去』
18	2011-10-02	Wiiをする機械	ふつおた/レビズバッ!『三菱重工サイバー攻撃 本格捜査 警視庁が被害届を受理』『メキシコ市議員が「2年婚」許可を提案、延長も可能』『たばこ増税1年、進む受動喫煙対策 禁煙6割失敗、販売回復』『わさびで覚醒に成功=5年連続で日本人―イグ・ノーベル賞」/今日のネタバレ『灼熱の小早川さん』
17	2011-09-25	I L♥VE 大河	ふつおた/レビズバッ!『馬淵元国交相が持論撤回、復興増税を容認』『スマホ市場、勢力図激変 KDDIもアイフォーン販売」/今日のネタバレ「とらドラ」
16	2011-09-18	Revin、猛省せよ	ふつおた/レビズバッ!『鉢呂経産相が辞任 死の町、放射能発言 発足9日目、野田政権打撃』『加護亜依 六本木の自宅に戻らず…「しばらくはゆっくり休みます」』『小宮山大臣がたばこ値上げ案発表 野田首相は愛煙家』『モンハン4が3DS登場で「任天堂本気すぎる」』
15	2011-09-11	ふつおた祭り	ふつおた
14	2011-09-04	ゲスト:森田季節さん	森田さんへの質問/フリートーク/レビズバッ!『野田氏が海江田氏破り新代表に』『“彼氏を追跡できる”と話題の「カレログ」がお詫び「男性差別の意図ない」」/ゴーストの条件の感想
13	2011-08-28	いよいよ発売	ふつおた/レビズバッ!『島田紳助さん、芸能界を引退』『民主党代表選告示』『リビア、カダフィ政権崩壊へ』『「ヱヴァンゲリヲン新劇場版:Q」は2012年秋公開」
12	2011-08-21	Rewrite10%	ふつおた/レビズバッ!『ネタバレにマイナスの効果はなし? 研究で明らかに』『加藤茶が45歳差の美人妻公開、ブログに「めちゃカワイイ」など絶賛の声』『サントリーが謝罪、東海(日本海)は「商品紹介の広告上の表現」』『まんべくんTwitterアカウント停止へ 発言内容を長万部町が問題視」/今日のネタバレ『Rewrite』
11	2011-08-14	Revinのコミケ	2011年夏コミの様子
10	2011-08-07	宣伝厨	村上裕一『ゴーストの条件』上梓/ふつおた/株式会社R&M/今日のネタバレ「臭作」
9	2011-07-31	八月の路上に捨てる	ふつおた/株式会社R&M/大喜利ゴースト
8	2011-07-24	ただいま、沙耶	ふつおた/株式会社R&M/今日のネタバレ『沙耶の唄』
7	2011-07-17	ポジティヴに!	ふつおた/株式会社R&M/今日のネタバレ
6	2011-07-10	最後のシモ北	ふつおた/株式会社R&M/今日のネタバレ
5	2011-07-03	裕一、猛省せよ	ふつおた/株式会社R&M/今日のネタバレ
4	2011-06-26	いざ新日暮里へ	ふつおた/株式会社R&M/今日のネタバレ
3	2011-06-19	焼かない、餃子	ふつおた/株式会社R&M
2	2011-06-12	CR人間模様	ふつおた/株式会社R&M/今日のネタバレ『魔法少女まどか☆マギカ』
1	2011-06-05	始まりの福音	ふつおた/株式会社R&M/今日のネタバレ

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?