やったこと

webサービスを作るときに考えたことを垂れ流します

Twitter BootstrapのツールチップでAリンクを無効にする!

ツイッター・ブートストラップに「Tooltip」という機能があります。

これを使うと、例えば「ヘルプ」みたいな文章にマウスをフォーカスすると、フワっと覆いかぶさるように説明文が表示される、とってもかっこいい効果ができます。

使い方は以下のような感じです。

★HTML
<a href="#" class="setumei" data-toggle="tooltip" data-placement="bottom" data-original-title="説明文だよ!">ヘルプ</a>

★Javascript
$(function(){
  $('.setumei').tooltip();
});

※Bootstrap公式サイト

Javascript · Bootstrap

ここでちょっとやっかいなのが「a href="#"」の箇所です。こう書くと文章をクリックしたときに画面がトップに遷移してしまって、ちょっとうざいんですよね・・。
なので以下のようにして、クリックしたときに画面の移動を中止してしまいましょう。

★Javascript
$(function(){
  $('.setumei').tooltip();
  $('.setumei').click(function(){
        return false;
  });
});

これで画面が移動しなくなって、だいぶ使い勝手が良くなりました・・。

ツイッターのストリーミングAPIが401エラーで使えない!

ツイッターの「ストリーミングAPI」を使ってつぶやきを採取する実験をしているんですが、いつも使えてるAPIがいきなり使用不能になってしまいました・・。

私は「Phirehose」というPHPのライブラリでAPIを利用しているのですが、以下のようなエラーが出て接続失敗していまいます・・。

Phirehose: HTTP failure 1 of 20 connecting to stream: HTTP ERROR 401: Authorization Required (<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n<title>Error 401 Unauthorized</title></head><body><h2>HTTP ERROR: 401</h2><p>Problem accessing '/1.1/statuses/sample.json'. Reason:<pre>    Unauthorized</pre></body></html>). Sleeping for 10 seconds.

なんだかツイッターの認証が「401」のエラーで失敗してるみたいですね・・。

いろいろググってみたところ、どうやらこのエラーの原因、私のサーバー(CentOS6)の時刻が狂っているせいみたいです。

たしかに、サーバに入って以下のようにdateコマンドで時刻を表示してみると、時計が一時間くらい狂っていました(状態もINITというあやしげな表記になっています・・)

# date
Mon Jul  3 18:41:39 JST 2017

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
============================================================================== 
     hogege          .INIT.      16 u    - 1024    0    0.000    0.000   0.000


そこでntpdを再起動して時計の調整を試みます。

# service ntpd restart
Shutting down ntpd:                                        [  OK  ]
Starting ntpd:                                             [  OK  ]


しかし、ntpdを再起動しても時刻を調整してくれません、困りました・・。

ntpってなんだか難しいんですよね・・。
時刻が調整されるのにすごい時間がかかったり、時刻がズレすぎてると調整をしてくれなかったり、とっても複雑でよく分らない動きをするプロトコルみたいです・・。

# date
Mon Jul  3 18:42:40 JST 2017

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
    hogegege         1.1.1.1      2 u    3   64    3    8.212  4530468   0.071


仕方がないので手動で時刻を設定する作戦に打って出ます。

手元の時計を見計らって「えいっ!」とdateコマンドを押し込みます(ntpってこういうことしても大丈夫なんでしたっけ・・?)

# date -s "07/03 20:03 2017"
Mon Jul  3 20:03:00 JST 2017

# service ntpd restart
Shutting down ntpd:                                        [  OK  ]
Starting ntpd:                                             [  OK  ]

# date
Mon Jul  3 20:03:15 JST 2017

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
    hogegege         1.1.1.1     2 u   11   64    1    8.083  -96.873   0.000

上記のように手動で強引に時刻を修正したところ、無事にツイッターAPIが使えるようになりました。

NTPもとくエラーとか吐かずに無事に動いてくれている様子です。

たぶんこれでよかったんだと思います、たぶん・・。


※P.S.
先日、ntpとはまた別の理由で、ストリーミングAPIが使用不能になってしまいました・・。

原因がまだはっきり特定できていないのですが、おそらく私のツイッターアカウントのメールアドレスの設定を変えてしまったことによって、なにかエラーが発生してしまった可能性があります・・。

ツイッターって、ひょっとしてメールアドレスを変えると、認証のための「Access Token」や「Access Token Secret」の値が変更される仕様になっているんでしょうか?ツイッターの開発者ページにログインして確認したところ、以前使っていた値が新しく変更されてしまっている気がします・・。

新しく発行された「Access Token」や「Access Token Secret」の値を使用してアクセスしたところ、無事にAPIが使えるようになりました・・。

なんだかモヤモヤしますが、とりあえずはこれで良しとします・・。

twitter_idからプロフィールページにアクセスする方法!

あまりないケースだと思うのですが、ツイッターIDが分かっているけどもそのアカウントのページが分からない。

そういうときは、以下のURLにアクセスすると本人のプロフィールページを見ることができます。

https://twitter.com/intent/user?user_id=xxxxxxxx

※xxxxxxxxはツイッターIDです

以上!

スパムメールに書いてあるURLをクリックしてはいけない!

最近ケータイに「スパムメール」をたくさん送り付けられていて困っています・・。

受信したスパムメールの中には、「あなたに6億円をプレゼントします!」とか「〇〇ですけどメアドを変えました!」とか「セフレになってくれませんか?」とか、いろんな意味不明な文章が書いてあって、そこにはフィッシングサイトに繋がるあやしげなURLが記載されています。

このURLですが、決してクリックしない方がいいです。

このURLはランダム文字列で生成されていて、あなたのメールアドレスと一対一対応しています。そしておそらく、あなたがURLをクリックしてサイトにアクセスしたことが、検出できる仕組みになっているのです。

私は今までずっとスパムを無視しまくっていて、受信したらすぐに「ゴミ箱」に捨てていたので、スパムの受信数は一日数通くらいのごく少ないものでした。

でもさっき興味本位でURLをクリックしてサイトを閲覧してしまったために、怒涛のようにひっきりなしに、大量のスパムを送り付けられるようになってしまいました・・。

どうやらスパマーの人から「このアドレスの保有者は脈アリ!」と見なされてしまったみたいです・・。

こんな状態ではもうこのメールアドレスは使い物になりません・・。

これって放っておけばまた元に戻るんですかね・・?

ほんと困りました・・。

【PHP】YoutubeのURLの動画ナンバーを正規表現で抜き出す!

youtubeのURLの中にある動画番号を、PHP正規表現(preg_match)によって取得する方法です。

つまり、「https://www.youtube.com/watch?v=B3o9h0RFw-c」というURLの中の「B3o9h0RFw-c」の部分を抜き出すということです。

以下のようなPHPコードを実行すると、

<?php
$url = "https://www.youtube.com/watch?v=B3o9h0RFw-c";
preg_match('/watch\?v=([\w\-]+)/', $url, $match);
print_r($match);
?>

matchの中に次のような値が格納されています。

Array
(
    [0] => watch?v=B3o9h0RFw-c
    [1] => B3o9h0RFw-c
)


すなわち「match[1]」の中に、お目当てのyoutbe動画番号が入っているというわけです。

以上

【AWS】EC2サーバーにボリュームをアタッチしたら起動しない!

アマゾンのEC2サーバー(t2.medium)にボリュームをアタッチして起動しようとしたら、エラーが発生して怒られてしまいました・・。

エラー文は以下のようなものです。

インスタンス開始のエラー
Invalid value 'i-hogegehogegehogege' for instanceId. Instance does not have a volume attached at root (/dev/xvda)


どうもボリューム・アタッチの際の「デバイス設定」が悪いせいでエラーが出てしまうみたいです。

デフォルトだと「/dev/sdf」というデバイスをおすすめされるのですが、これを「/dev/xvda」と書き換えてアタッチしたところ、ちゃんと起動するようなりました。

エラーの原因が全然分からなくて、ずいぶん時間取られちゃったよ・・。

【jQuery】spanタグをテキストを残して削除する!

「spanタグ」の中身のテキストを残してタグをだけを消去する方法です。

以下のような「spanタグ」があったとします。

<span class="hogespan">ほげ~</span>


これをjQueryの「unwrap」を使って削除します。一旦中身のコンテンツを選択して、その外側の要素を削除するという作戦です。

//jQuery削除処理
 $('.hogespan').contents().unwrap();


これでspanは消去されてテキストだけが後に残ります。

ほげ~


この方法は「aタグ」を削除したい場合にも使えます。テキストはそのままにして、リンクだけを外すことができます。

以上です。