main.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "strings"
  6. "strconv"
  7. )
  8. var version = "1.0.0"
  9. func help () {
  10. fmt.Println("使い方:");
  11. fmt.Println("hozonsite -v :バージョンを表示");
  12. fmt.Println("hozonsite -s [ポート番号] :ポート番号でウェブサーバーを実行(デフォルト=9920)");
  13. fmt.Println("hozonsite -h :ヘルプを表示");
  14. fmt.Println("hozonsite <URL> :コマンドラインでウェブサイトを保存");
  15. }
  16. func main () {
  17. cnf := getconf() // コンフィグファイル
  18. args := os.Args // コマンドラインのパラメートル
  19. if len(args) == 2 {
  20. if args[1] == "-v" { // バージョンを表示
  21. fmt.Println("hozonsite-" + version)
  22. return
  23. } else if args[1] == "-s" { // :9920でウェブサーバーを実行
  24. serv(cnf, 9920)
  25. } else if args[1] == "-h" { // ヘルプを表示
  26. help()
  27. return
  28. } else { // コマンドラインでウェブサイトを保存
  29. if checkprefix(args[1]) { // プロトコールはあってるかどうか
  30. eurl := stripurl(args[1]) // パラメートルの文字(?、=等)を削除
  31. exist := checkexist(eurl, cnf.datapath) // 既に/usr/share/hozonsite/archiveに存在するかどうか
  32. var confirm string // 既に存在したら、使う
  33. if len(exist) > 0 { // あ、既に存在する
  34. fmt.Println("このページが既に保存されているみたいです。")
  35. fmt.Println("本当に手続きましょうか? [y/N]")
  36. for _, ex := range exist { // 既に存在するページのURLを表示
  37. fmt.Println(strings.Replace(ex, cnf.datapath, cnf.domain, 1))
  38. }
  39. fmt.Scanf("%s", &confirm)
  40. }
  41. if len(exist) == 0 || confirm == "y" || confirm == "Y" { // 存在しない OR 「本当に手続きましょうか?」でYを入力した場合
  42. path := mkdirs(eurl, cnf.datapath)
  43. getpage(args[1], path) // ページをダウンロード
  44. scanpage(path, eurl, cnf.datapath) // 色々の必須な編集
  45. fmt.Println(cnf.domain + strings.Replace(path, cnf.datapath, "", 1)) // 新しいURLを表示
  46. }
  47. return
  48. } else { // 結局HTTPかHTTPSじゃないわね…
  49. fmt.Println("URLは不正です。終了…")
  50. return
  51. }
  52. }
  53. } else if len(args) == 3 && args[1] == "-s" { // 好みなポート番号でウェブサーバーを実行
  54. if port, err := strconv.Atoi(args[2]); err != nil { // でも、数字じゃないかもしん
  55. fmt.Printf("%qは数字ではありません。\n", args[2])
  56. return
  57. } else { // OK、実行しよ〜
  58. serv(cnf, port)
  59. }
  60. } else { // パラメートルは不明の場合、ヘルプを表示
  61. help()
  62. return
  63. }
  64. }