2014-02-18

【物販】電脳卸がなんか変なことはじめるようだ


以前から、自作のサイトで電脳卸のアフィリエイトを利用しているのだけど、またなんか変なこと始めたようです。

月額利用費が3000円&アフィリエイト報酬の30%のみでネットショップがアフィリエイト広告を打てるようにするみたいです。
デポジットや初期費用とか必要なしで、しかも独自ドメインが3つ利用可能、というなんか可笑しな値段設定のようです。

紹介サイトは以下のとおり。
電脳卸独自ドメインアフィリエイト


あと、以前書いたネットショップの運営方法をまとめた記事を載せておきますね。

【起業】「低費用個人事業開業マニュアル完全版」サイト完成!

以上です。

2014-02-04

【ホテル・旅館】携帯/スマホ/PCでGPSを使えるホテル・旅館・温泉地を検索可能なサイト


だいぶ前に作ったじゃらんやホットペッパーのWebAPIを使用した旅行系の検索サイトを公開したのでここで紹介を兼ねて宣伝しますね。
もともとフィーチャーフォン用に作ったものなので、以上にシンプルな見た目になっていますが結構多機能です。

サイト名とURL
「多賀城屋トラベル部」http://tagajoya.com/

■特徴
フィーチャーフォン(ガラケー)、スマホ、PCすべてに対応しています。

地域から市町村単位までの細かい宿・ホテル・温泉地の分類
基本的な宿・ホテルの検索機能として「地域>県名>市町村」までの分類がされています。

・GPSを利用した宿・ホテル、グルメ店検索
フィーチャーフォン、スマホ、PCともGPSを利用した宿・ホテル、グルメ店を検索できます。検索範囲は1km~50kmの範囲を調べられます。

・宿名で直接検索
宿名を検索ボックスへ直接入力することでも検索が可能です。

・各宿・ホテルの詳細ページ機能
外観の写真やアクセス方法、チェックイン・アウトの時間、地図を確認できます。

・グルメ店の詳細ページ機能
紹介の写真やアクセス方法、営業時間、地図を確認できます。

・目的のホテルの宿泊プラン一覧と予約機能
各ホテルの詳細ページから「プラン一覧」へのリンクがあり最大10件程度の宿泊プランが表示されます。
さらに、宿泊プラン名のリンクから予約ページへ移動できます

・目的の宿・ホテルの緯度経度を利用して近くのグルメ店の検索
各ホテルの詳細ページから「近くのグルメ店」リンクから緯度経度を利用したグルメ店一覧ページへ移動できます。

・フィーチャーフォンのみの機能として、プラン検索条件を保存できるマイプラン機能
細かいホテルの検索条件を保存していつでも見られるようにできる機能です。

・おまけ:旅行記
カテゴリ分けされた旅行記を見ることができます。

■使い方のヘルプ等
使い方のヘルプとかは以下のページをご覧ください。
http://tagajoya.com/help.php

以上です。

2013-12-25

【PHP】マニュアルのShift_JIS変換と整形・容量削減について

PHPの関数・言語マニュアルはWindows用のCHMファイル形式でも配布されていますが、このファイルがまったくの役立たずです。
ダウンロードしただけでは、中のヘルプHTML内容を見ることすらできないものなのです。

そこで、HTML Help Workshopというソフトで一度CHMファイルをバラして修正する必要があります。
2つのファイル名を変更するくらいならば手でも簡単にできますが、すべてのファイル(2013-12現在1万3千ファイル程度あります)の文字コードとメタタグ変更を手でやるのは時間の無駄なので、これを一気に行えるプログラムを作ってみました。
ただ、自分の環境ではうまくいっただけなので、注意して使ってくださいね。


 define( 'DEST_PATH', 'HTML Help WorkshopでデコンパイルしたHTMLファイルのディレクトリパス' );
 
 $d = dir( DEST_PATH );
 
 $i = 0;
 while( false != ($entry = $d->read()) ) {
  
  if( substr_count( $entry, '.html' ) > 0 ) {
   
   $get_file_path = DEST_PATH . $entry;
   
   $contents = file_get_contents( $get_file_path );
   print( '[' . $get_file_path . "] has input. \r\n" );
   
   $contents = mb_convert_encoding( $contents, 'sjis-win', 'UTF-8' );
   $contents = preg_replace( '/utf\-8/i', 'Shift_JIS', $contents );
   $contents = preg_replace( '/\"+/i', '"', $contents );
   $contents = preg_replace( '/\s+/i', ' ', $contents );
   
   file_put_contents( $get_file_path, $contents );
   print( '[' . $get_file_path . "] has output. \r\n" );
   
   $i += 1;
  }
 }
 $d->close();
 
 exit();



以上です。

2013-10-21

【テキスト】正規表現パターン作成代行サービス開始!

久しぶりに何かお客様から依頼されてモノを作りたくなったので、ちっちゃいところからやり直そうと言うことで正規表現を作成代行してみようと思います。
あまりにも複雑な正規表現パターン(たとえば、規約どおりのメールアドレスのパターンとか)じゃ無ければ作りますので、良かったらオーダーしてみてください。

→依頼ページ:正規表現についての簡単なものを作成します!

□依頼時の注意点
・料金は一つの依頼につき500円です。
・処理対象テキストデータを送ってもらいます。
 たとえばHTML、Aタグのhref属性を取得したいなら具体的なAタグのテキストを複数ください。
・処理内容の具体的な内容
 たとえば、XMLデータならどのタグの要素が欲しい、とか書いてください。

□依頼してからパターンが納品される日数
・簡単なものなら1日、比較的複雑なもので2~3日程度で納品します。
・パターン個数は基本的に1つの依頼で1つにしようと思っています。

以上です。それでは。

2013-10-05

【青空文庫】青空文庫のXMLをパースしてみた

【青空文庫】青空文庫のXMLをパースしてみた 自分の読書用に青空文庫に掲載してあるXMLをパースしてみたよ。
青空文庫のXMLは仕様通りにキッチリ書いてあるものと、そうでないものがあり、ちょっと苦労した。

以下のクラスは基本的に「大見出し」と「中見出し」で区切って配列にして返すものだけど、面倒な処理は正規表現やexplodeでばっさり切り分けたりしてます。

---
このクラスを使って小説を転載したものは、以下のサイトで読めます。
 ・多賀城[たがのき]小説投稿サイト
良かったら見てくださいませ。
---

/*
*   青空文庫XMLパーサ
*     2013/10/01
*/
class Aozora
{
  const         FROM_ENCODING = 'sjis-win';
  const         TO_ENCODING   = 'UTF-8';
  
  public        $filename;
  public        $title;
  public        $author;
  /*
    本文の階層構造
    
    大見出しがある場合
    bodies = array(
      '大見出し_01' => array( '中見出し_01' => '本文', '中見出し_02' => '本文', ... '中見出し_nn' => '本文' ),
      '大見出し_02' => array( '中見出し_01' => '本文', '中見出し_02' => '本文', ... '中見出し_nn' => '本文' ),
      '大見出し_03' => array( '中見出し_01' => '本文', '中見出し_02' => '本文', ... '中見出し_nn' => '本文' ),
              ...
      '大見出し_nn' => array( '中見出し_01' => '本文', '中見出し_02' => '本文', ... '中見出し_nn' => '本文' ) );
      
    大見出しが無い場合
    bodies = array( '中見出し_01' => '本文', '中見出し_02' => '本文', ... '中見出し_nn' => '本文' );
  */
  public        $bodies;
  public        $infomation;          // 小説情報
  public        $notes;               // 注
  public        $is_omidasi;
  public        $is_tyumidasi;
  
  private       $raw_text;
  private       $main_text;
  private       $biblio;
  
  public function __construct( $filename )
  {
    $this->filename = $filename;
    $this->raw_text = file_get_contents( $this->filename );
    $this->raw_text = mb_convert_encoding( $this->raw_text, self::TO_ENCODING, self::FROM_ENCODING );
    $this->bodies = array();
  }
  
  public function get_title()
  {
    return sprintf( '%s (作者:%s)', $this->title, $this->author );
  }
  
  public function get_bodies()
  {
    return $this->bodies;
  }
  
  /**
    XMLパース本体
  */
  public function parse()
  {
    // 改行を全て消す
    $this->raw_text = preg_replace( '#[\n\r]+#i', '', $this->raw_text );
    $this->raw_text = preg_replace( '#[\s]+#i', ' ', $this->raw_text );
    
    // タイトルと著者を取得する
    $ret = preg_match( '#

(.*?)

#i', $this->raw_text, $temp_text ); $this->title = $this->replace_imgtag( $temp_text[ 1 ] ); $this->title = trim( $this->title ); $ret = preg_match( '#

(.*?)

#i', $this->raw_text, $temp_text ); $this->author = $this->replace_imgtag( $temp_text[ 1 ] ); $this->author = trim( $this->author ); // 付加情報を取得する $ret = preg_match( '#
(.*?)
#i', $this->raw_text, $temp_text ); $this->infomation = $this->remove_htmltag( $temp_text[ 1 ] ); $this->infomation = $this->add_return( $this->infomation ); $this->infomation = trim( $this->infomation ); // 本文を全て取得する $ret = preg_match( '#
(.*)
#i', $this->raw_text, $temp_text ); $this->main_text = trim( $temp_text[ 1 ] ); // 大見出しから切り出し $this->parse_omidasi(); } /* 大見出しがある場合の本文切り出し */ private function parse_omidasi() { if( $this->is_omidasi( $this->main_text ) ) { // 大見出しがある場合 $temp_text = explode( '

', $this->main_text ); foreach( $temp_text AS $temp ) { if( trim( $temp ) == "" ) { continue; } if( !$this->is_omidasi( $temp ) ) { continue; } $ret = preg_match( '#(.*?)

(.*)$#', $temp, $temp_omidasi ); $omidasi = $this->remove_htmltag( $temp_omidasi[ 1 ] ); $omidasi = $this->replace_imgtag( $omidasi ); $omidasi = trim( $omidasi ); $this->bodies[ $omidasi ] = $this->parse_tyumidasi( $temp_omidasi[ 2 ] ); } } else { // 大見出しがない場合 $this->bodies[] = $this->parse_tyumidasi( $this->main_text ); } } /* 中見出しから本文切り出し @param $html 大見出し1つ分のテキスト または 本文全体のテキスト */ private function parse_tyumidasi( $html ) { $tyumidasi_array = array(); if( $this->is_tyumidasi( $html ) ) { $temp_text = explode( '

', $html ); foreach( $temp_text AS $idx => $temp ) { if( trim( $temp ) == "" ) { continue; } if( !$this->is_tyumidasi( $temp ) ) { continue; } $ret = preg_match( '#(.*?)

(.*)$#', $temp, $temp_tyumidasi ); $tyumidasi = $this->remove_htmltag( $temp_tyumidasi[ 1 ] ); $tyumidasi = $this->replace_imgtag( $tyumidasi ); $tyumidasi = trim( $tyumidasi ); $tyumidasi_array[ $tyumidasi ] = $this->remove_htmltag( $temp_tyumidasi[ 2 ] ); $tyumidasi_array[ $tyumidasi ] = $this->replace_imgtag( $tyumidasi_array[ $tyumidasi ] ); $tyumidasi_array[ $tyumidasi ] = $this->add_return( $tyumidasi_array[ $tyumidasi ] ); } } else { $tyumidasi_array[ 1 ] = $this->remove_htmltag( $html ); $tyumidasi_array[ 1 ] = $this->replace_imgtag( $tyumidasi_array[ 1 ] ); $tyumidasi_array[ 1 ] = $this->add_return( $tyumidasi_array[ 1 ] ); } return $tyumidasi_array; } /* 大見出しがあるかどうか */ private function is_omidasi( $html ) { $ret = substr_count( $html, '' ); if( $ret > 0 ) { $this->is_omidasi = true; } else { $this->is_omidasi = false; } return $this->is_omidasi; } /* 中見出しがあるかどうか */ private function is_tyumidasi( $html ) { $ret = substr_count( $html, '' ); if( $ret > 0 ) { $this->is_tyumidasi = true; } else { $this->is_tyumidasi = false; } return $this->is_tyumidasi; } /* 余分なHTMLタグを除去する */ private function remove_htmltag( $text ) { return preg_replace( '#<(?:|/)(?:em|div|span|a|h3|h4|hr)[^>]*>#', '', $text ); } /* 画像タグを置き換える */ private function replace_imgtag( $text ) { return preg_replace( '#]+>#', "$1", $text ); } /* * 改行を元に戻す */ private function add_return( $text ) { return preg_replace( '#]+>#', "\r\n", $text ); } }


以上です。

ZenBack

WebMoney ぷちカンパ