【HSP】URL文字列を分解する【モジュール】

【HSP】URL文字列を分解する【モジュール】

最近HSPやってなかったけど、やっぱGUI作るのは楽だから、通信関連のツールをHSPで作ることにした。
まずはそのためにURLを分解するモジュール作った。本当はIEについてる機能使えば、わざわざ自作しなくてもよかったんだけど、作るのも楽しいってことで自作。もうちょっと改良できそうだけどとりあえずうp。

// 
// URL分解モジュール (仮) by kerupani129
// 

#ifndef strsockh
#define strsockh

#module strsock

#deffunc spliturl var url, array result
  
  // 変数準備
  result.0    = ""
  result.1 = ""
  result.2      = ""
  result.3     = ""
  result.4  = ""
  
  char = 0 // 1[byte]
  type = 0 // scheme, authority, path, query, fragment
  strpos = 0 // 位置
  
  repeat
    // 1[byte]読み込み
    char = peek(url, cnt)
    
    // typeチェック
    switch char
    case '/' // path, query, fragment
      if type<2 {
        if strpos==cnt && peek(url, cnt+1)=='/' {
          strpos = cnt
          type = 1
          continue cnt+2
        } else {
          strpos = cnt
          type = 2
        }
      }
    swbreak
    case '?' // query, fragment
      if type<3 {
        strpos = cnt
        type = 3
      }
    swbreak
    case '#' // fragment
      if type<4 {
        strpos = cnt
        type = 4
      }
    swbreak
    case 0x00
      break
    swbreak
    default
      if type==1 {
        if strpos==cnt { // path, query, fragment
          strpos = cnt
          type = 2
        }
      }
    swbreak
    swend
    
    // 文字列切り取り
    switch type
    case 0
      // scheme/path 対応 仮
      // result.0 += strmid(url, cnt, 1)
      result.2 += strmid(url, cnt, 1)
    swbreak
    case 1
      result.1 += strmid(url, cnt, 1)
    swbreak
    case 2
      result.2 += strmid(url, cnt, 1)
    swbreak
    case 3
      result.3 += strmid(url, cnt, 1)
    swbreak
    case 4
      result.4 += strmid(url, cnt, 1)
    swbreak
    swend
    
    // typeチェック
    if char==':' { // authority, path, query, fragment
      if type<1 {
        // scheme/path 対応 仮
        result.0 = result.2
        result.2 = ""
        // 
        strpos = cnt+1
        type = 1
      }
    }
  loop
return

#global

#endif

■使い方

spliturl var1, var2
var1 : 元のURLが入った文字列型変数
var2 : 結果を代入する文字列型配列変数

■サンプル

sdim result, 64, 5 // 配列5個分あればよい

url = "http://www.youtube.com/watch?v=EhD4U_PcNtg#watch-headline-title" // 自由に書き換えてネ

spliturl url, result // これで変換

mes "スキーム       : "+result.0
mes "オーソリティー : "+result.1
mes "パス           : "+result.2
mes "クエリ         : "+result.3
mes "フラグメント   : "+result.4

■URLの簡単な説明

スキーム : httpとか (プロトコル名であるとは限らない)
オーソリティー : サーバー名とか。ユーザー情報が付くこともある。user:pass@host:80みたいにすると、
         接続するポート番号の指定や、basic認証ができたりするけれど、のちのRFCで
         「authority   = [ userinfo "@" ] host [ ":" port ]」っていう表現があったりするから単純にそう
         考えていいのかどうかはよくわからない。
パス : ファイルのパスとか。ただし、mailtoスキームだとメイルアドレスがパスになる。
クエリ : GET送信に使うアレ
フラグメント : HTMLの要素のidを指定して、ページ内にリンクするアレ
それではまたいつか~。
↓ブログランキング投票 (クリック) お願いしま~す。


「【HSP】URL文字列を分解する【モジュール】」への2件のフィードバック

  1. おおっこれは面白いですね^^!!
    そしてこれらはクエリとかフラグメントとかいう名前だったのですね……
    参考になりました。ありがとうなのです@@

  2. ありがとうございます!

    そうらしいです~。どういたしまして。

コメントは受け付けていません。