logo
home > web >

TwitterのAPI仕様変更によりHTTPでのアクセスができなくなったのでその時の対応をメモ

CPANモジュールのNet::Twitterが対応していなかったので
直接ファイルを書き変えた。
サーバのCPANモジュールの以下のファイルの
14行目辺りをhttpsへ変更
~/Net/Twitter/Role/API/RESTv1_1.pm

#has apiurl => ( isa => 'Str', is => 'ro', default => 'http://api.twitter.com/1.1' );
has apiurl => ( isa => 'Str', is => 'ro', default => 'https://api.twitter.com/1.1' );

これで問題なく動作した。
どうやら2月6日のアップデートでアプリ認証用のアクセスURLに渡すパラメータ名が変更になった模様。

認証ページ遷移後に下記のエラーが出ていたら待っていても
エラーのままです。
fb_error.png


○変更パラメータ
app_id → client_id
next → redirect_uri


下記の感じでFacebook::Graphを使用してURL生成してたら
生成後の上記パラメータを置換してあげましょう。。

my $fg = Facebook::Graph->new(
        postback => Postback,
        app_id   => APP_ID,
        secret   => SECRET
    );

    my $get_code_url = $fg->authorize->extend_permissions(PERMISSIONS)->uri_as_string;




下記のaddTransとaddItemを注文完了ページへ挿入する
itemは商品ごとに繰り返すようにする


<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', '各アカウントのアナリティクスコード']);
  _gaq.push(['_trackPageview']);
  _gaq.push(['_addTrans',
      '注文ID',           // transaction ID - required
      '店名', // affiliation or store name
      '合計金額',          // total - required; Shown as "Revenue" in the
                        // Transactions report. Does not include Tax and Shipping.
      '税',           // tax
      '送料',          // shipping
      '市',       // city
      '県',     // state or province
      '国'            // country
  ]);
  _gaq.push(['_addItem',
      '注文ID',         // transaction ID - necessary to associate item with transaction
      '商品ID',         // SKU/code - required
      '商品名',      // product name - necessary to associate revenue with product
      'カテゴリ',     // category or variation
      '単価',        // unit price - required
      '数量'             // quantity - required
  ]);
  _gaq.push(['_trackTrans']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

Subversion(svn)で、アップデート(update)する際に更新されるファイルを事前に確認する方法。

svn st -u
下記を実行。
defaults write com.apple.finder AppleShowAllFiles -boolean true

で次のコマンドでFinderを再起動します。
killall Finder

これで不可視ファイルや不可視フォルダが表示されます。

元に戻すには設定を削除します。
defaults delete com.apple.finder AppleShowAllFiles
killall Finder
マウント後のディレクトリパーミッションが
rootになってうまく書き込みできない場合は下記を実行

mount -t vboxsf -o uid=501,gid=501,dmode=0777,fmode=0777 共有名 マウント先ディレクトリ
http://developers.facebook.com/docs/reference/plugins/like/
上記のいいねボタン(Like button)生成フォームで設置スクリプトを作成。

サイトにfacebookいいねを設置できたと思ったら、リロードすると0になってしまって
なぜかカウントが蓄積されませんでした。

そんなときはデバッガーを使いましょう。

facebook debugger
http://developers.facebook.com/tools/debug

何かしらえらーが出るはずです。

今回はapp_idとadminsが無いよ!とおこられました。

ということでfacebookアプリを作成してapp_idを取得しましょう。




既に構築されているDBに追加でpostgisを導入して、位置情報の取り扱いをしたい場合、
以下のsqlをDBに流し込めば大丈夫でした。

postgisは既にインストールされていることが前提


psql -U ユーザ名 -d DB名 -f /usr/share/pgsql/contrib/lwpostgis.sql
psql -U ユーザ名 -d DB名 -f /usr/share/pgsql/contrib/spatial_ref_sys.sql 
psql -U ユーザ名 -d DB名 -f /usr/share/pgsql/contrib/postgis_comments.sql


流し込めたら確認

## DB接続
psql -U ユーザ名 -d DB名

## postgis version 確認コマンド
select postgis_version() ;

            postgis_version            
---------------------------------------
 1.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1

バージョンが確認できればOK

DBを再度createdbし直す必要は全くないんですね。よかった。
MovableType フォームプラグイン CreamForm その3

5. 入力チェックについて
入力チェックは下記の9つ用意されています。
    email      メール
    tel        電話番号
    zip        郵便番号
    integer    整数
    alphabet   アルファベット
    alphadigit  英数
    uri        URL
    max_length  最大入力字数
    min_length  最小入力字数

フォームの入力値とこの9つの入力チェックを結びつけているのは
 plugins/CreamForm/lib/CreamForm/Cream.pm
のファイルになります。

該当箇所は下記。
use constant RULE => [
  {
    name        => 'email',
    check       => [qw(email not_null)],
    max_length  => undef,
    min_length  => undef,
    label       => 'メールアドレス',
  },
  {
    name => 'name',
    check => [qw(not_null)],
    max_length => 50,
    min_length => 1,
    label       => '名前',
  },
  {
    name => 'type',
    check => [qq(not_null)],
    max_length => undef,
    min_length => undef,
    label       => 'お問い合わせ理由',
  },
  {
    name => 'content',
    check => [qw(not_null max_length)],
    max_length => 200,
    min_length => undef,
    label       => '本文',
  },
];


name フォームテンプレートのnameと紐づきます。
check 9つのうちどのチェックを適用するかを指定します。複数可。
max_length 最大文字数
min_length 最小文字数
label エラー時の項目表示名です。



例としてメールアドレス入力について見てみましょう。
  {
    name        => 'email',          
  →フォームテンプレのnameがemailの入力値について
   判定をすることになります。
    check       => [qw(email not_null)],    
  →9つのチェックのうちemailとnot_nulの判定をします。
    max_length  => undef,         
  →最大値文字数はチェックしません
    min_length  => undef,         
  →最小値文字数はチェックしません
    label       => 'メールアドレス',      
  →エラー時の表示名称は「メールアドレス」と表示されます
  },


上記の例でフォームのメールアドレスを必須項目から任意入力にする場合は
not_nullを削除してしまえば良い訳です。

また最大文字数を30文字までにするなら
    max_length  => 30,
とすればよいです。         



6. 項目の追加や拡張について
準備中。




MTフォームプラグインCreamFormの使用方法その2です。


3. テンプレートの設置
設定が完了したら、フォームのテンプレートを設置しましょう。
インデックステンプレートに3つのテンプレートを追加します。どのウェブサイト、ブログのインデックステンプレートでもかまいません。

・CreamForm入力
・CreamForm確認
・CreamForm完了

※テンプレートの名前を必ず上記の名前にしてください。上記のテンプレート名でフォームのテンプレートを判別していますので間違えないようにしてください。


各テンプレートに下記のMTタグ、HTMLタグを挿入してください。
スタイルやHTMLタグはお好みで変更してください。あくまでサンプルです。


formのactionにはドキュメントルートからCreamFormプラグインのcm.cgiへ送信してください。
本サイトでは下記のサンプルの通りです。
hiddenで__modeの値も渡しています。こちらには確認なのか完了なのかを判別するための値が入っています。


○ CreamForm入力

<p class="error">
    <mt:Loop name="errors">
    <mt:getvar name="__value__{label}" /><br />
    </mt:Loop>
</p>

<form action="/mt/plugins/CreamForm/cm.cgi" method="post">
    <input type="hidden" name="__mode" value="confirm">
            <table class="tableCreamForm" cellspacing="1">
                <tr>
                    <th>名前</th>
                    <td>
                        <input id="mail_author" name="name" size="30" 
value="<mt:var name="param" key="name">" style="width:90%;" />
                    </td>
                </tr>
                <tr>
                    <th>メールアドレス</th>
                    <td>
                        <input id="mail_email" name="email" size="30" 
value="<mt:var name="param" key="email">" style="width : 90%;" />
                    </td>
                </tr>
                <tr>
                    <th>お問い合わせ理由</th>
                    <td>
                    <select name="type" >
<option value="">選択する</option>
<option value="アプリについて">サイトについて</option>
<option value="MovableTypeについて">MovableTypeについて</option>
<option value="Perlについて">Perlについて</option>                    
<option value="イラスト・デザインについて">イラスト・デザインについて</option>
<option value="その他について">その他について</option>
                    </select>                      
                    </td>
                </tr>
                <tr>
                    <th>本文</th>
                    <td>
 <textarea id="mail_text" name="content" rows="15" 
cols="20" style="width : 90%;">
<mt:var name="param" key="content">
 </textarea>
                    </td>
                </tr>
            </table> <br />
            <input type="submit" value="確認">
        </form>



○ CreamForm確認
<table class="tableCreamForm" cellspacing="1">
    <tr>
        <th>名前</th>
        <td>
        <mt:var name="name" />
        </td>
    </tr>
    <tr>
        <th>お問い合わせ理由</th>
        <td><mt:var name="type" /></td>
    </tr>
    <tr>
        <th>メールアドレス</th>
        <td><mt:var name="email" /></td>
    </tr>
    <tr>
        <th>本文</th>
        <td><mt:var name="content"  remove_html="1" nl2br="xhtml"/></td>
    </tr>
</table>

<form action="/mt/plugins/CreamForm/cm.cgi" method="post">
    <input type="hidden" name="__mode" value="finish">
    <input type="hidden" name="name" value="<mt:var name="name">">
    <input type="hidden" name="type" value="<mt:var name="type">">
    <input type="hidden" name="email" value="<mt:var name="email">">
    <input type="hidden" name="content" value="<mt:var name="content">">
    <input type="hidden" name="token" value="<mt:var name="token">"><br />
    <a href="#" onClick="history.back(); return false;" >戻る</a>
    <input type="submit" value="送信する"/>
</form>


○ CreamForm完了
完了フォームには完了のメッセージを入力してください。





4. 管理画面について
入力されたデータはすべてDBに保存されます。保存されたデータを確認するには管理画面のシステムの左メニューに追加されお「お問い合わせ」メニューにアクセスしてください。
otoiawase.jpg


送信された一覧が表示されます。

削除の場合はチェックボックスにチェックを入れて削除ボタンを押してください。
CSVダウンロードを押すとCSVファイルがダウンロードされます。文字コードはShit-jisになってます。

また詳細を押すと内容が全て表示されます。