jQueryプラグインの作成メモ 後編
- 2011/12/24 13:02
- カテゴリー:制作, プログラム
- タグ:JavaScript
気ままな雑記帳&実験場。好き勝手に色々やっています。
カテゴリー「制作」の検索結果は以下のとおりです。
jQueryを使うと一からゴリゴリとJavaScriptを書くよりも、プログラムが短くスッキリしたものになります。
なので他のページに移植するのは比較的容易ですが、プラグインにしておくと導入がもっと簡単になります。他人にファイルを渡して導入してもらう場合も、最低限の指示で導入できるようになります。
jQueryのプラグインは色々なサイトで配布されていますが、同じように自分でもプラグインを作成することができます。
という訳で、普通のjQueryコードをプラグインにする方法のメモ。プラグインの書き方は何通りもあるので、あくまでも「自分ではこう書いている」というものです。(jQueryの基礎知識があることを前提としています。)
単純なランダム表示は簡単だけど、「特定のメッセージが表示されやすいランダム」のような「確率を指定したランダム」が必要になったのでメモ。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>rand</title>
</head>
<body>
<?php
$configs = array(
array(
'probability' => 60,
'message' => '60%の確率で表示されます。'
),
array(
'probability' => 30,
'message' => '30%の確率で表示されます。'
),
array(
'probability' => 10,
'message' => '10%の確率で表示されます。'
)
);
$count = count($configs);
$max = 0;
for ($i = 0; $i < $count; $i++) {
$max += $configs[$i]['probability'];
}
$rand = rand(1, $max);
$from = 0;
$to = 0;
$result = '';
for ($i = 0; $i < $count; $i++) {
$from = $to;
$to += $configs[$i]['probability'];
if ($from < $rand and $rand <= $to) {
$result = $configs[$i]['message'];
}
}
echo '<p>' . $result . '</p>';
?>
</body>
</html>
probability
の値は、合計100にならなくても動作に問題はありません。あくまでも「値の大きいものが表示されやすい」というだけ。
なお、基本的な考え方は確率変更可能ランダムテキストを参考にしています。(自分が理解しやすいようにコードを書き換えましたが。)こういうのが思いつく人は凄いなぁ…。
phpMyAdminの libraries/zip.lib.php
を使えば、PHPのみでファイルの圧縮ができたのでメモ。
<?php
require_once 'zip.lib.php';
$zipfile = new zipfile();
//圧縮するファイルのパス
$file1 = 'test.txt';
$file2 = 'test/test.jpg';
//ファイルを追加
$zipfile->addFile(file_get_contents($file1), $file1);
//ファイルを追加
$zipfile->addFile(file_get_contents($file2), $file2);
/*
//ZIPファイルを作成する場合
if (file_put_contents('test.zip', $zipfile->file()) === false) {
exit('error');
}
*/
//ZIPファイルをダウンロードする場合
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="test.zip"');
header('Content-Length: ' . strlen($zipfile->file()));
echo $zipfile->file();
exit;
?>
TwitterでOAuthを行うPHPプログラムを書く場合、HTTP_OAuth_Consumerクラスを使って
$consumer = new HTTP_OAuth_Consumer('CONSUMER_KEY', 'CONSUMER_SECRET');
$consumer->setToken('TOKEN');
$consumer->setTokenSecret('TOKEN_SECRET');
$response = $consumer->sendRequest('http://api.twitter.com/1/statuses/user_timeline.xml?include_rts=true&page=1', array(), 'GET');
$xml = simplexml_load_string($response->getBody());
print_r($xml);
のように処理していたのですが、6月7日から急に「This method requires authentication.」というエラーが返ってくるようになりました。
なかなか原因が解らなかったのですが、sendRequestでデータを送受信する際に
$response = $consumer->sendRequest('http://api.twitter.com/1/statuses/user_timeline.xml', array('include_rts' => true, 'page' => 1), 'GET');
とするとエラーにならなくなりました。引数を ?
に続けて渡さずに、別途 array()
で渡すように変更しています。
?
に続けて引数を渡すのは非推奨な方法で、6月7日に非推奨な方法を廃止したのかなぁ…と思いますが、原因は不明です。「ページ送り機能が削除されて、APIが使い物にならなくなった。」とか思っていたのですが、そうではなくて良かった。ヽ(;▽;)ノ
少し前からTwitterには鍵をかけていますが、freoに関するツイートのみブログのサイドバーに表示するようにしてみた。更新情報とか簡単な返信とかは、ここに書いていこうと思います。
ちなみに仕組みは、
となっています。鍵を書けたアカウントでも一部の発言のみを公開できるので、それなりに需要のある仕組みかも。
設置が少しややこしいのが難点だけど。(´・ω・`)
freoをiPhoneに対応させたので、テストを兼ねてiPhoneから投稿。iPhone経由でインターネットを利用する時間が増えつつあるので、対応できて満足。(。╹ω╹。)
自分で使いつつ、不便な点は調整して行きたいと思います。
追記1
複数の方から「更新履歴に libs/freo/version.php
の更新を書き忘れている」と教えていただきました。現在は加筆済みです。m(_ _)m
追記2
一つ前のエントリーにも掲載した、iPhone用に画像サイズを調整するJavaScriptが動作していないというご意見がありました。
再現できていないですが、URLをお知らせいただければ調べてみます。
追記3
追記2の不具合は、配布ファイルに js/jquery.autoresize.js
を含めるのを忘れていたからでした…。自分の環境では以前から配置済みだったのでエラーにならず、エラーメッセージを送ってもらうまで気付きませんでした…。
バージョンアップして修正しておきました。
freoをiPhoneに対応させるために作業中。ある程度できたので、後は実際に使いつつ調整していくとします。
本文の画像がiPhoneのウインドウ幅より大きいとレイアウトが崩れる問題に頭を悩ませていたけど、JavaScriptで
$('img').removeAttr('width').removeAttr('height');
$('img').css('max-width', '300px');
とするようにしてみた。もともとの幅と高さの指定を削除してから、「最大300px」というCSSを追加。これでしばらく様子を見てみるとします。
Twitter API 仕様書
http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt
statuses/followers
の項目にフォロワーを取得する方法は書かれていますが、APIの仕様上100件までしか取得できません。ですがAPIから送られてくる next_cursor
の値を使えば、続きを取得することができます。
そんな訳で書いてみたのが以下のプログラム。フォロワーをすべて取得しますが、APIを何度も呼び出すのでフォロワーが多いと重くなります。
<?php
function get_followers($screen_name)
{
$results = array();
$cursor = -1;
while (1) {
$xml = simplexml_load_string(file_get_contents('http://api.twitter.com/1/statuses/followers/' . $screen_name . '.xml?cursor=' . $cursor));
foreach ($xml->users->user as $user) {
$results[] = (string)$user->screen_name;
}
$cursor = $xml->next_cursor;
if ($cursor == 0) {
break;
}
}
return $results;
}
?>
以下のようにID(正確にはスクリーンネーム)を指定すると、フォロワー一覧を返してくれます。なお、鍵をかけているユーザーの情報は取得できません。
<?php
$followers = get_followers('favoritelabo');
print_r($followers);
exit;
?>
iPhone用ページを作れるように、マークアップを勉強中。今のところこんな感じ。
これからまだまだ調整していく可能性あり。CSS3の事を勉強すれば、動きのあるページも簡単に作れそう。