やったこと

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

このブログについて

absgといいます。webサービスのこととかいろいろ書いてます。

最近作ったサイト
全国で発生した事件のデータベース「地域の事件簿」
みんなでなかよく政治の話!「なかよし討議!」
女子のつぶやきまとめ「Twiggy×Twiggy!」
ツイッターバトラーズ!
ニコニコ人気ユーザーランキング


連絡先
何かご相談がある人はご連絡ください。
http://absgexp.net/prof/con.html

    (⌒)
  ∧__∧ (~)
 (。・ω・。)( )
 { ̄ ̄ ̄ ̄}
 {~ ̄お__}  ゴユックリ ドゾー
 {~ ̄茶__}
 {____}

ツイッターAPIの仕様変更、急にログインができなくなったゾ!

先日、我がサイトのTwitterログイン機能が急に使用不能になってしまってあせりました・・。

Twitter APIが下記のようなエラーを返して認証を受け付けてくれなくなってしまいました・・。

"code":415,"message":"Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings"


どうも、2018年6月13日ごろくらいからTwitter APIの仕様変更があったらしく、ツイッターアプリの「Callback URL設定」をしっかりしないと、ログインエラーを返されてしまうようになってしまったみたいです・・。


でもおかしいな、ちゃんとコールバックURLの設定をしていたはずなんだけどな・・。

ツイッターアプリの設定画面見てもコールバックはちゃんと設定されている・・。
http://xxxx.com/auth/callback

もしやと思って下記のようにURLを変更してみました・・。
http://xxxx.com/auth/callback/

そうしたらちゃんとログインできるようになった!
そうですか・・。スラッシュ「/」が足りなかったというわけなんですか・・。

厳しすぎんよツイッターAPI・・。

以上です

【PHP】ライブドアブログに「AtomPub API 」使って記事投稿・画像投稿!

PHPを使ってライブドアブログに記事を投稿する方法です!

「AtomPub API 」というのを使ってリモートのサーバーから投稿します!
投稿処理には「HTTP_Request2」が必要なので、あらかじめサーバーにインストールしておいてください!

HTTP_Request2のインストールの仕方:
PEARをインストールしないでHTTP_Request2を使う方法 - やったこと


①画像投稿の仕方
画像投稿のコードは以下のとおりです、ライブドアのブログに「hogege.jpg」という画像をアップロードしています!$userや$rootEndPointや$passには、自分のブログに設定されている情報をセットしてね!

  require_once(dirname(__FILE__)."/lib/HTTP/Request2.php");

  $user = "hogegege";
  $rootEndPoint = "https://livedoor.blogcms.jp/atompub/hogegege";
  $pass = "ABCDEFG";

  $time = gmdate("Y-m-d\TH:i:s\Z");
  $nonce = pack('H*', sha1(md5(time())));
  $digest = base64_encode(pack('H*', sha1($nonce.$time.$pass)));

  $img_dir = dirname(__FILE__)."/";
  $imgfile  = $img_dir.'hogege.jpg';
  $imgdata = file_get_contents('./hogege.jpg', true);
  $content_type = image_type_to_mime_type(exif_imagetype($imgfile));
  $url = 'http://livedoor.blogcms.jp/atom/blog/'.$user.'/image';

  $wsse =
    'UsernameToken Username="'.$user.'", '.
    'PasswordDigest="'.$digest.'", '.
    'Nonce="'.base64_encode($nonce).'", '.
    'Created="'.$time.'"';

  $headers = array(
    'X-WSSE: ' . $wsse,
    'Content-Type: ' . $content_type,
    'Expect:'
  );

  try{
    $req = new HTTP_Request2();
    $req->setUrl($url);
    $req->setMethod(HTTP_Request2::METHOD_POST);
    $req->setHeader($headers);
    $req->setBody($imgdata);
    $response = $req->send();
    $xml = simplexml_load_string($response->getBody());
    $src = $xml->content['src'];
    $thumbnail = $xml->content['thumbnail'];
  } catch (HTTP_Request2_Exception $e) {
    die($e->getMessage());
  } catch (Exception $e) {
    die($e->getMessage());
  }


②記事投稿の仕方
お次は記事の投稿です!上記とだいたい同じ感じで投稿できます!

  require_once(dirname(__FILE__)."/lib/HTTP/Request2.php");

   $user = 'hogege';
  $rootEndPoint = 'https://livedoor.blogcms.jp/atompub/hogege';
  $pass = 'ABCEDFG';

  $time = gmdate("Y-m-d\TH:i:s\Z");
  $nonce = pack('H*', sha1(md5(time())));
  $digest = base64_encode(pack('H*', sha1($nonce.$time.$pass)));

  $url = 'http://livedoor.blogcms.jp/atom/blog/'.$user.'/article';

  $title = 'ここにタイトル';
  $description = 'ここに本文';
  $description2 = 'ここに追記';
  $category = 'ここにカテゴリー';
  $created = date('Y-m-d\TH:i:s\Z');

  $wsse =
    'UsernameToken Username="'.$user.'", '.
    'PasswordDigest="'.$digest.'", '.
    'Nonce="'.$nonce.'", '.
    'Created="'.$time.'"';
  $rawdata =
    '<?xml version="1.0" encoding="utf-8"?>'.
    '<entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns:blogcms="http://blogcms.jp/-/spec/atompub/1.0/">'.
    '<title>'.$title.'</title>'.
    '<category term="'.$category.'" />'.
    '<blogcms:source>'.
    '<blogcms:body><![CDATA['.$description.']]></blogcms:body>'.
    '<blogcms:more><![CDATA['.$description2.']]></blogcms:more>'.
    '</blogcms:source>'.
    '</entry>';

  $headers = array('X-WSSE: '.$wsse, 'Expect:');

  try{
    $req = new HTTP_Request2();
    $req->setUrl($url);
    $req->setMethod(HTTP_Request2::METHOD_POST);
    $req->setHeader($headers);
    $req->setBody($rawdata);
    $response = $req->send();
  } catch (HTTP_Request2_Exception $e) {
      die($e->getMessage());
  } catch (Exception $e) {
      die($e->getMessage());
  }

コードは下記のブログを参考にさせていただきました!ありがと~!

参考ブログ:
http://pixieslalala.blog.jp/archives/1038269324.html
http://webpaprika.com/498.html

skypeでいきなり「チャットはご利用いただけません」と表示されチャットできなくなった!

先日Skypeでチャットをしていたら、いきなり入力欄に「チャットはご利用いただけません」と表示されて、チャットが不能になってしまいました・・(Windows版のスカイプです)

つい昨日までは当たり前のように使えていたのに、今日PCを起動したらこのような状態になってしまった・・。

マイクロソフトの質問欄にも、似たような相談があるようですが、あまり明確な答えが出ていない様子です・・。
相手がオンラインの状態で、通話もチャットの受信もできるのにチャットの送信だけができない。 - マイクロソフト コミュニティ

しょうがないので、スカイプの公式ページに直接アクセスしてチャットをすることにしました。
こちらの方から一回チャットを送信したところ、アプリ版のSkypeでもチャットが可能になりました。
Skype

いったいなんなんでしょうかね、何かの不具合なのでしょうか・・。発生の仕方の意味不明だし直り方も意味不明ですね・・。

■結論
Skypeのアプリで「チャットはご利用いただけません」と表示されたら、公式ページで一回チャットを行うと直るかも。

以上!

JavascriptでURLエンコードした文字列がPHPでデコードできない!

タイトルそのままの不具合です・・。

javascript側でURLエンコードした文字列がPHP側でデコードできない・・。

javascript側では「escape()」という関数でエンコードしました。
そして、PHP側では「urldecode()」という関数でデコードしました。
でも、これではちゃんとデコードできない!

どうもjavascript側にはいろいろなエンコードの形式があって「escape()」という関数はPHPとあまり相性がよろしくないみたい・・。なので、代わりに「encodeURIComponent()」という関数を使うことにしました。

この形式でエンコードすれば、ちゃんとPHPの「urldecode()」でデコードができます!

下記ページに、双方の対応関係がとても詳しくのっていますね…。
Javascript と PHP の URLエンコード について | Lonely Mobiler

以上!

Font Awesomeを使ってツイッターのアイコンを作る!

いろんなWebアイコンフォントが無料で使える便利なライブラリ「Font Awesome」を使って、ツイッターの青い鳥のアイコンを作ってみましょう。

①ライブラリの読み込み!
まずはFont Awesomeのcssのライブラリを読み込みます。下記ページのCDNで提供されているものを利用してしまいましょう。
Quick Start · BootstrapCDN by StackPath

HTMLにこんな風に記述してcssを読み込みます。

<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css" rel="stylesheet">


②アイコン設置!
そしてアイコンを設置します。文章中にこんな風に記述すると、ツイッターの青い鳥の文字アイコンが表示されます。

<i class="fa fa-twitter" aria-hidden="true" style="color: #00aced;"></i>

簡単にできましたね、以上です!

【PHP】AWSでhtmlをphpとして実行したいんだけどできない!

この前借りたAWSサーバーで「index.html」というページを「index.php」として実行したかったんですが、なかなか設定がうまくいきませんでした・・。

(ちなみにPHPのバージョンは5.6です・・)

これをやるときの典型的な方法は「.htaccess」に以下のような設定を追加するというもの。

AddType application/x-httpd-php .html


しかし、これを追加しても全然PHPが実行されません・・。

仕方がないので、「httpd.conf」(/etc/httpd/confのディレクトリにあります)に、上記の設定を直接書き込むことにしました。

そして設定追加後「sudo service httpd restart」を打ってhttpdを再起動。

これでhtmlがphpとして動作するようになりました。

AWSのサーバーは「.htaccess」に直接書き込む方法は、禁止されているんですかね。

まあとりあえず動いたので、これでよしとします・・。