PHPで自分のつぶやきを取得する方法【API1.1】
やり方についてはほぼこちらのサイトを参考にしています。
PHP+OAuthでTwitter - SDN Project
- twitteroauthをダウンロードします。
- アプリ登録を行います。
登録が完了するとアプリケーションの詳細画面になります。
そこで「Consumer key」と「Consumer secret」が表示されますのでメモします。 - アプリケーション画面の下の方にある「Create my access token」ボタンをクリックします。
処理後、ボタンの上の方に「Access token」と「Access token secret」が表示されますのでメモします。 - 下記のプログラムで自分のつぶやきを取得します。
<?php //1.でダウンロードしたtwitteroauth.phpをinclude require_once('./twitteroauth/twitteroauth.php'); //2.3.で取得した各キーを入力 $consumer_key = 'Consumer key'; $consumer_secret = 'Consumer secret'; $access_token = 'Access token'; $access_token_secret = 'Access token secret'; // OAuthオブジェクト生成 $to = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret); // user_timelineの取得。TwitterからXML形式が返ってくる $req = $to->OAuthRequest("https://api.twitter.com/1.1/statuses/user_timeline.json","GET",array("q"=>"dari_zakki", "count"=>"10")); // Twitterから返されたJSONをデコードする $results = json_decode($req); echo '<ul>'; foreach($results as $value){ echo '<li>'; echo '<img src="'.$value->user->profile_image_url.'" /><br />'; echo $value->text.'<br />'; echo $value->user->name.'<br />'; echo date("Y-m-d H:i:s", strtotime($value->created_at)); echo '</li>'; } echo '</ul>'; ?>
これで自分がつぶやいたタイムラインを取得できます。
前に比べるとめんどくさくなりましたね。
まあ前が緩すぎたって話ではあるんですが^^;
参考サイト
nandani | 2013年06月20日 | コメント(0) | トラックバック(0) | API関連 | PHP関連
大容量のmp4ファイルをPHPで読み込んで出力する場合
数MBレベルのmp4ファイルならば
header('Content-type: video/mp4'); readfile("mp4ファイルのパス"); exit;
で十分対応できていたのですが、100MB越えのファイルになった際、「ファイルが壊れているため動画を再生できません。」という表示になってしまいました。
いろいろと調べた結果、readfileがダメとのこと。
記述を
header('Content-type: video/mp4'); $handle = fopen("mp4ファイルのパス", 'rb'); while (!feof($handle)) { echo fread($handle, 4096); ob_flush(); flush(); } fclose($handle); exit;
と変更したところ、正常に再生されました。
ちなみにこれ、メモリによるみたいです。
ini_set("memory_limit","256M");
とPHPに記述しメモリ制限を増やしたところ、「readfile」でもうまく行きました(使用したファイルの容量は160MBです。)
でもこれはレンタルサーバによっては効かない場合もあるので、やっぱり後者の記述方法が確実かと思います。
※後者の場合ini_set("memory_limit","8M")でも正常に再生できました。
参考サイト
nandani | 2013年06月19日 | コメント(0) | トラックバック(0) | PHP関連
Twitterウィジェット編集時の注意事項
まあ、当たり前だしこんなことすんな!って話ではあるんですが、一応メモ。
Twitterウィジェットコードを新規発行して、サイトに張り付けた後、もう1つ新しいコードを発行しようと、その画面のまま、「ユーザー名」を変更したところ、さきほどサイトに張り付けたウィジェットが変更したユーザーのタイムラインになってしまいました。
これまでのTwitterウィジェットコード発行画面って、完全に「新規作成」オンリーだったし、FacebookのLikeBoxも同様で、登録済みのものを「編集」するという概念では無かったので完全にうっかりしてしまいました。
注意しましょう。
nandani | 2013年06月19日 | コメント(0) | トラックバック(0) | SNS関連
旧式Twitter ウィジェットついに消滅
旧Twitter ウィジェットがついに終了したようですね。
提供終了と言われてからもしばらくは使えてたんですが、今日見たら完全に消えてしまっていました。(もしかしたら数日前から?)【追記】6月12日から使えなくなってたみたいですね。気づくのが遅かったorz
新しくウィジェットコードを発行する場合は、アカウントはなんでもいいのでTwitterにログイン後
https://twitter.com/settings/widgets
にアクセスし、右上の「新規作成」ボタンからウィジェットコードを発行してください。
以前はドメインの設定も必要だったはずだけど、これはもう無くなったみたいですね。
あれ結構めんどくさかったから、それはありがたい。
でも高さの調整が全然聞かないTT なんでだ!
【追記】
<a href="https://twitter.com/dari_zakki" data-widget-id="347178416799371264" height="450">@dari_zakki からのツイート</a>
というようにaタグにheightを指定したらうまくいった。
ウィジェットコード発行するときの、高さ入力は何のためにあるのか・・・(バグ?)
nandani | 2013年06月19日 | コメント(0) | トラックバック(0) | SNS関連
pre_get_postsを使う場合は、管理画面にまで反映してしまわないよう注意
WordPressメモ。
サイトの検索にて、post_typeを絞ろうと、functions.phpに
function include_post_type($query) { if ($query->is_search()) { $query->set('post_type', array('post','xxx','xxx')); } } add_action( 'pre_get_posts', 'include_post_type' );
と記述したのですが、管理画面の検索にまでこれが反映されてしまいました。
正確には
function include_post_type($query) { if (!$query -> is_admin && $query->is_search()) { $query->set('post_type', array('post','xxx','xxx')); } } add_action( 'pre_get_posts', 'include_post_type' );
というように、「!$query -> is_admin」も必要だったみたいですね。
いきなり管理画面の検索がおかしくなったからあせったわ~^^;
参考サイト
query_postsを捨てよ、pre_get_postsを使おう【追記あり】【報告あり】 | notnil creation weblog
nandani | 2013年06月18日 | コメント(0) | トラックバック(0) | CMS関連
Joruri CMSに入力フィールドを追加
Joruriというか、Ruby on Railsを始めたばかりのど素人のメモ。
Joruri CMSには残念ながら「カスタムフィールド」という機能が存在しません。
ということで任意の入力フィールドを追加する場合、データベースから操作する必要があります。
ちなみに自分が使っているJoruri CMSのバージョンは「1.3.2」です。
以下、「コンテンツ種別:記事」の、ページ新規作成・編集画面に、「備考」入力フィールドを追加してみた手順です。
- DBの「article_docs」テーブルに「remark」カラムを追加。
カラム名:remark
種別:TEXT
NULL:チェック - app/views/article/admin/docs/_form.html.erb
を編集。
「内容」フィールドの下あたりにこんな感じで追加。<tr> <th colspan="1">備考</th> <td colspan="3"><%= f.text_area :remark, :rows => '3', :class => ' remark ', :style => 'width: 500px;' %></td> </tr>
- apache再起動。(これしないと反映されない)
- app/views/article/public/node/docs/show.html.erb
を編集。
表示させたい部分に、<%= @item.remark %>
と記述する。
- apache再起動。
apacheを再起動させる理由は、そうしないとviewの編集内容が反映されないからですが、キャッシュを削除する方法さえわかれば、わざわざapacheを再起動させる必要はないかと思います。
これについてはまだ調査中。
viewレベルの変更でapache再起動はさすがにしんどい^^;
まだ開始したばかりなので、いろいろと分かってない部分がありますが、なんとか任意のフィールドを追加したり、カスタマイズできそうですね。
【追記 2013/06/27】
キャッシュの削除方法分かりました。
config/environments/production.rb
の
config.cache_classes
config.action_controller.perform_caching
config.action_view.cache_template_loading
をすべてfalseにすると、再起動させる必要が無くなり、viewやcontrollerの更新がすぐに反映されます。
config.cache_classes = false
config.action_controller.perform_caching = false
config.action_view.cache_template_loading = false
こちらのサイトを参考にさせていただきました。
nandani | 2013年06月18日 | コメント(0) | トラックバック(0) | CMS関連 | Ruby関連
LIKEBOXの最小幅は292px
サイドバーのエリアにLIKEBOXをつけてほしいとの依頼を受けたので、いつものところでコードを発行し、HTML5のコードを張り付けたところ、オーバーフローした・・・
調べてみると、どうやら幅の最小値は292pxらしい。
Facebook「Like Box」の最小幅 | lazynotes
どうしようかな~と思い、試しにiframeのコードを張り付けたらうまく行った(ちなみに設定した幅のサイズは232px)。
twitterの新しいウィジェットもそうだけど、最小値を決められると困るな~
nandani | 2013年06月17日 | コメント(0) | トラックバック(1) | WEB関連全般
target-densitydpi=device-dpiに注意【viewport】
metaタグのviewportの設定にて、「target-densitydpi=device-dpi」とすると、表示する解像度がそのままデバイスの解像度となります。
スマホの横幅(短辺)のサイズが640px時代だったら、これでも特に問題なかったんですが、今や1080pxや1280pxなんて機種も登場しています(横幅がですよ!)。
この高解像度スマホの場合、問題となるのがSNSのボタン(「いいね」とか「ツイート」とか「Google +」ボタン)
これがめっちゃ小さくなります。米粒レベル。
サンプル(高解像度のスマホをお持ちの方は下記のURLにアクセスしてみてください):
https://nandani.sakura.ne.jp/phptest/sns_button.php
これらはボタン専用コードを埋め込んでおくと、自動的に表示されるボタンため、スタイルシートによるサイズ調整ができません。
これの解決方法は「target-densitydpi= medium-dpi」にするか、「target-densitydpi」をそもそも記述しない(デフォルトがmedium-dpiだから)
もし解像度によってスタイルシートを切り替えている場合は、サイズの基準が変わりますので注意しましょう。
もしくは、width=320とする手もあります(もはや古いやり方らしいですが。)
<meta name="viewport" content="width=320, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
サンプル:
https://nandani.sakura.ne.jp/phptest/sns_button.php?dpi=medium
これで、幅320pxの場合のみ考えておけば良いので非常に楽です。
欠点としては、タブレットで見たとき、やたら文字や画像が大きく感じてしまいます。(どんな解像度でも320pxの画面を引き延ばして表示するようなものだから。)
やっぱりこれからはレスポンシブ・ウェブデザインしかないのかな~。
参考サイト
nandani | 2013年06月17日 | コメント(0) | トラックバック(1) | HTML関連 | SNS関連
IE9でドロップシャドウ(box-shadow)が効かない
table内に記述しているaタグに、角丸とドロップシャドウをかけてボタンっぽくしたのですが、なぜかIE9でドロップシャドウが効かない状態になりました。
スタイルの記述はこんな感じ
table a{ position:relative; z-index:1; background-color:#FFF; display:inline-block; text-decoration:none; padding:3px 8px; margin:5px 5px 5px 0px; -moz-border-radius: 5px; /*FireFox*/ -webkit-border-radius: 5px; /* Safari and Chrome */ border-radius: 5px; /* Opera 10.5+, IE */ -moz-box-shadow: 1px 1px 3px #777; /* Firefox */ -webkit-box-shadow: 1px 1px 3px #777; /* Safari and Chrome */ box-shadow: 1px 1px 3px #777; /* Opera 10.5+, IE */ behavior: url("/PIE.htc"); }
「position:relative」も「z-index」もちゃんと記述しているのに効かない。
というか角丸はちゃんと効いてるのに、なぜドロップシャドウだけ効かない?
他の場所で使っているドロップシャドウはちゃんと効いてるのに。
・・・もしや、と思い該当のaタグをtableから出してみたところ、
・・・効いた!
tableタグ内に記述したタグにはドロップシャドウをかけられないのかな?と思い調べてみると、こちらのサイトを発見しました。
IE9でborder-collapse: collapse指定要素内でbox-shadowが表示されない! | ブログデザイン
どうも、tableのスタイルを「border-collapse:collapse;」にしているとダメみたい。
なんでやねん・・・
その部分のtableのみスタイルを「border-collapse: separate;」とし、解決しました。
【追記】 というかtable自体にではなく、ドロップシャドウをかけるタグのスタイル(この場合aタグ)に「border-collapse: separate;」と書けばよいみたい。
nandani | 2013年06月14日 | コメント(0) | トラックバック(1) | CSS関連
入力フィールドを複数追加できるタイプのカスタムフィールドを扱う際の注意点
Custom Field Templateプラグインを使用すると、投稿時に入力フィールドを任意に増やせるカスタムフィールドを作ることが出来ます。
↓こういうの
追加ボタンを押すことで、フィールドを増やしていけるわけですが、入力はともかく、取り出し方には注意が必要です。
通常、カスタムフィールドを取り出す場合
<?php $meta_values = get_post_meta($post_id, $key, $single); ?>
$post_id:投稿ID
$key:カスタムフィールド名
$single:取得方法。配列ならfalse、1つめだけならtrue
というふうに取り出すのですが、これで取り出すと、複数フィールドの並び順がばらばらで取得されてしまいます。
しかも投稿を編集するたびに並び順が変わるという困った状態に。
なぜ上から順に取り出してくれない・・・
ということで、検索したところ、こちらの方法で解決しました。
Custom Field Template(カスタムフィールドテンプレート) | WordPress 編
複数フィールドを上から順に取り出す場合はsqlをつかって取り出します。
複数フィールドのカスタムフィールド名が「Hoge」とした場合
<?php global $wpdb; $query = "SELECT * FROM ".$wpdb->postmeta." WHERE post_id = ".get_the_ID()." AND meta_key = 'Hoge' ORDER BY meta_id ASC"; $cf = $wpdb->get_results($query, ARRAY_A); $Hoge = array(); if($cf){ foreach($cf as $row){ $Hoge[] = $row['meta_value']; } } ?>
これで複数フィールドの並び順(meta_id)順でデータを取得することができます。
nandani | 2013年05月18日 | コメント(0) | トラックバック(0) | CMS関連 | PHP関連