LoginSignup
0

More than 5 years have passed since last update.

EddyStone(Mac)でURL送信しようとしたら18Byteまでしか送れなかったので、YOURLSも入れて短縮URLを実装した

Posted at

0.はじめに

MacをEddyStone発信機にし、さらに同じMac上でYOURLSサービスも稼働させました。
社内LANでの利用を想定して構築しました。
つまづいたところとかいろいろありましたが、日本語のサイトがあまりなく解決に時間を要したので、手順等具体的に残します。

【環境】

項目 バージョン
機種 MacBook Pro
OS OS X EI Capitan バージョン10.11.5
Apache 2.4.18
MySQL Ver 14.14 Distrib 5.7.13, for osx10.11 (x86_64)
PHP 5.5.34
node.js v6.2.2
YOURLS v 1.7.1

1.EddyStoneを動かす

たった2行!最も簡単にeddystoneでURLを送信する方法を参考にさせていただき、記事どおりの手順で成功!(送信するURLはYahoo!にしています)
・・・全然具体的じゃねー :fearful:
ここはつまずかなかったのでこんな感じで。

EddyStone.png

2.MySQLにYOURLS用のDBを作る

create database yourls;

3.YOURLSをダウンロード

GitHubよりモジュールをダウンロードします。

yourlsdownload.png

「YOURLS-1.7.1」という名前のフォルダでダウンロードできました。

4.YOURLSフォルダをapacheルートディレクトリ配下にコピーする

今回は、apacheルートディレクトリに「yourls」フォルダを作り、その配下にYOURLS-1.7.1の中身をコピーしました。

こんな感じのディレクトリ構成

ルートディレクトリ
 └yourls
  ├admin
  ├css
  ├images
  ├includes
  ├js
  ├pages
  ├user
  ├index.php
  ├readme.html
      ・
      ・

5.設定ファイルを作る

user/sample-config.phpをコピーし、同じディレクトリにconfig.phpという名前で貼り付け。

config.phpを開き、以下の項目を修正する。

2.で作ったyourlsデータベースにアクセスできるユーザを指定

/** MySQL database username */
define( 'YOURLS_DB_USER', 'your db user name' );

2.で作ったyourlsデータベースにアクセスできるユーザのパスワードを指定

/** MySQL database password */
define( 'YOURLS_DB_PASS', 'your db password' );

2.で作ったデータベース名を指定

/** The name of the database for YOURLS */
define( 'YOURLS_DB_NAME', 'yourls' );

ここでつまづきました。詳しくは次項で。

/** MySQL hostname.
 ** If using a non standard port, specify it like 'hostname:port', eg. 'localhost:9999' or '127.0.0.1:666' */
define( 'YOURLS_DB_HOST', 'localhost' );

localhostではなく

define( 'YOURLS_DB_HOST', '127.0.0.1' );

にしました。

YOURLSのURLを設定。今回はyoursフォルダ配下に作りましたので、以下。

/** YOURLS installation URL -- all lowercase and with no trailing slash.
 ** If you define it to "http://sho.rt", don't use "http://www.sho.rt" in your browser (and vice-versa) */
define( 'YOURLS_SITE', 'http://localhost/yourls' );

cookieキーをこのページで表示されるものに設定。

/** A random secret hash used to encrypt cookies. You don't have to remember it, make it long and complicated. Hint: copy from http://yourls.org/cookie **/
define( 'YOURLS_COOKIEKEY', 'modify this text with something random' );

管理ページにログインするユーザとパスワードを設定。

/** Username(s) and password(s) allowed to access the site. Passwords either in plain text or as encrypted hashes
 ** YOURLS will auto encrypt plain text passwords in this file
 ** Read http://yourls.org/userpassword for more information */
$yourls_user_passwords = array(
'username' => 'password',
// 'username2' => 'password2',
// You can have one or more 'login'=>'password' lines
);

他にも設定項目はありますが、必ず変更しないといけないのは以上。

6.YOURLSインストールページを表示

あれ?
スクリーンショット 2016-06-30 14.30.57.png

コマンドラインから「yourls」データベースに接続できてるのになんで?

必死に英語ページを翻訳解読し、試しに以下のphpを読み込ませてみた。

test.php
$mysqli = new mysqli("localhost", "[username]", "[password]", "yourls", 3306);
echo $mysqli->connect_errno;

スクリーンショット 2016-06-30 14.37.28.png

ちーーーん。
なんでエラーになーかや。

同じエラーをWindowsで経験されている方がいらっしゃった。どうもlocalhostがIPv6で解釈されているよう。

ふむ。ダメもとでやってみよう。

test.php
$mysqli = new mysqli("127.0.0.1", "[username]", "[password]", "yourls", 3306);
echo $mysqli->connect_errno;

スクリーンショット 2016-06-30 14.42.39.png

まじかーーーーーー∑(゚Д゚)

では早速config.php

define( 'YOURLS_DB_HOST', '127.0.0.1' );

にすると...

スクリーンショット 2016-06-30 14.46.22.png

でーーーーたーーーーーー!!

7.YOURLSインストール

「Install YOURLS」をクリックするとみんな経験している

スクリーンショット 2016-06-30 15.09.36.png

これ。DBはうまく作れていそうなのでとりあえず後回し。

今回は社内向けに構築するため、ログインなんか手間でしょうがないので、ログインしてない一般ユーザ向けのトップページsample-public-front-page.txtを使う。
そのままコピーしてindex.phpにリネームすれば...

スクリーンショット 2016-06-30 17.12.42.png

いった!!ログイン不要で誰でも作れる!

8.動作確認 ...数日ハマる

試しにYahoo!の短縮URLを作ったけど

スクリーンショット 2016-07-03 20.42.23.png

スクリーンショット 2016-07-03 20.44.13.png

ですよねー。世の中そんなに甘くはない。
次項に自分が確認した項目を挙げます。

9.Not Foundの場合の確認項目

まず原因切り分けのため、URLを以下にしてアクセスしてみる。

http://localhost/yourls/yourls-go.php?id=4

表示された。ということはリダイレクトがうまくいっていない模様。

7項で.htaccessに関する警告が出ていたのを思いだし、そら動かねーわということで、yourls/に作成。

.htaccess
# BEGIN YOURLS
<IfModule mod_rewrite.co>
RewriteEngine On
RewriteBase /yourls/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /yourls/yourls-loader.php [L]
# RewriteRule ^(.*)$ http://google.com [L]
</IfModule>
# END YOURLS

まだ動かない。
.htaccess読み込まれてる?ということでhttpd.confに以下を追記しapache再起動。

httpd.conf
<Directory "/Library/WebServer/Documents/yourls“>
    Options FollowSymLinks Multiviews
    MultiviewsMatch Any
    AllowOverride All
    Require all granted
</Directory>

まだ動かない。
.htaccessにあるmod_rewrite読み込んでる?ということでhttpd.confの以下をコメント解除。

httpd.conf
LoadModule rewrite_module libexec/apache2/mod_rewrite.so

動いた。。

10.日本語化

ここに具体的に書いてあるのでそのとおりにやる。

11.短縮URLをランダムにする

連番はダサいのでランダム文字にする。
yourls/user/plugins/にプラグイン用のフォルダを作成する。

mkdir random-keywords

Githubからplugin.phpをダウンロードし、作成したフォルダに配置する。
管理ページのプラグインに追加されるので、「有効にする」。

yourlsプラグイン.png

ついでにランダム文字数を変更する。初期値は5文字なので3文字に変更。

plugin.php
$ozh_random_keyword['length'] = 3;

できた!
スクリーンショット 2016-07-05 11.11.16.png

12.さいごに

社内向けということで、ログイン不要にしたりランダム文字数を3にしたりサブディレクトリに構築したりでテキトーな感じになってます。

目的はEddyStoneでURLを送信することなので、
・「短縮URL」にしようとしているのにサブディレクトリにしてしまって後悔。直そうと思います。
・社内DNSにこのMacの定義を入れたり、さらに短縮URL化しなくては。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0