Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

URLにTXTの情報を詰めてみる

More than 1 year has passed since last update.

下の記事でも紹介していますが、以前URLを使ってストレージいらずのテキスト共有のサービスを作ったことがあります。
Ionicによるプライベートプロダクト開発の裏側事情
Screen Shot 2018-12-22 at 23.24.43.png

その時の内容はURLにテキストの情報を全て入れ込むというなかなかの力技だったんですが、半年以上たってその時の処理を忘れないように備忘録として書き残しておきます。

処理の手順

GolangのBase64エンコーディングにはなんとURLEncodingというものがあります。

base64.NewEncoder(base64.URLEncoding, &buf64)

こいつを使えばURLセーフなBase64エンコーディングを行うことができます。さらにGolangには標準でgzipのライブラリがあります。なので、これらを組み合わせて以下のようなことが行えます。

  1. テキストをプログラムで受け取る
  2. テキストをgzipで圧縮する
  3. URLセーフでBase64エンコーディングする
  4. URLのパラメータにする

上記を実装するために以下、Golangでテキスト→gzip→Base64のソースコードになります。

package main

import (
    "bytes"
    "compress/gzip"
    "encoding/base64"
    "fmt"
    "io/ioutil"
    "strings"
)

func main() {
    text := `
          ///////////////////////// ------\/////////ヽ
       ////:///////////////>  "´        ∨////////∧
      .///////////////> ´                ∨////////∧
     ///////////> ´                   ∨////////∧
     |///////,〃/                       i//////////ハ
     |////////i/            _  --――― 、--}//////////∧
     |////////|            ´    ト.     ヽ \'/////////∧
     |////////|      ..  イ        i \   ノ  ', \////////∧
     |////////|   .   ´i   i         ー|-- 斗、.    ',  \///////∧
     |////////| /    |  ハ    ',  ∧! ,ィf=ミ、   ',ー― ///////∧
     |////////|'   .、_|..斗七ヽト、   ヽ| u   {::♥::} ゞ \ ',i///////////,∧
     |////////|      |/i/,.ィf=ミ ヽト、!|   `¨¨¨´/  /\!.マニ ア//////,∧
     |////////ハ     / .ィ f:::♥ノ   | / ///// / i  |=イ/////////∧
     |////////,∧    /{ ゞ `¨´ /, j/ /// ./イ /  .|  i  i///////////
     |/////////|.ヘ  / 乂 /////      u /   |  |  i!///////////
     |/////////>j/   \          _   j/|  .| ∧!  !///////////
     |/////// ∠ィ ヘ     >_      ,ィv´  _)  / |  |/:::::∧ .|V//////////
     |//////ゝ---一 ヘ  ゝ----' u   ゝ- ´    /i .|  |:::::::::::∧!::∨/////////
     |//////////| i ∧    ',≧=-   __ .イ !ハ  |:::::::::::::_:::乂////////
     |//////////| ∧ ∧   ト{    }    i    {ーヘ !´ ̄ / アニ≧= ---
     |//////////|/::::ヘ.  ',   |从 __ノi    ',   ノ  ヘ|  / /ニニニニニニ
     |//////////|:::::::::::\{ヘ  .|-<   ゝ    r 、 -、     /  /ニニニニニニニ
     |/////////ノ==-<   ', |         r'   く      ./ニニニニニニニニ
     .ノ//>≦ニニニニニ\  }/          ` ´ \\    /ニニニニニニニニ
    .///ニニニニニニニニニ\              `´    {ニニニニニニニニニ
    .イニニニニニニニニニニニヽ                  /ニニニニニニニニニ
    `
    if b64, err := EncodeEncodeBase64Base64(text); err != nil {
        fmt.Println("err:", err)
    } else {
        fmt.Println(b64)
        if aa, err := DecodeBase64Gzip(b64); err != nil {
            fmt.Println("err:", err)
        } else {
            fmt.Println(string(aa))
        }
    }

}

func EncodeEncodeBase64Base64(str string) (string, error) {
    var buf64 bytes.Buffer
    wb64 := base64.NewEncoder(base64.URLEncoding, &buf64)
    wgz := gzip.NewWriter(wb64)
    _, err := wgz.Write([]byte(str))
    if err != nil {
        return "", err
    }
    wgz.Close()
    wb64.Close()
    sRequest64 := string(buf64.Bytes())
    return sRequest64, nil
}

func DecodeBase64Gzip(b64 string) ([]byte, error) {
    if r, err := gzip.NewReader(base64.NewDecoder(base64.URLEncoding, strings.NewReader(b64))); err != nil {
        fmt.Println(err)
        return nil, err
    } else {

        if s, err := ioutil.ReadAll(r); err != nil {
            fmt.Println(err)
            return nil, err
        } else {
            return s, nil
        }
    }
}

まとめ

上記ソースコードを使えば好きなテキストをURLに埋め込むことが可能です。また、別記事にて上記ソースコードを利用してWebアプリ側でテキストを表示する処理を記載します

scrpgil
NEC→キネカのテックリード。 IonicとGoが得意分野です。 TechFeed ProでIonicのexpertです。 趣味はアスキーアート関連ツールの開発。 Ionic / Stencil / Vim / NEM / Go / Beego / Huel / Beer AAHub運営&開発
https://aahub.org
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away