Advertisement
hiiw

chk_shitaraba.bat

Feb 15th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 3.68 KB | None | 0 0
  1. @ECHO OFF
  2.  
  3. SET CURL_EXE=C:\bin\curl\bin\curl.exe
  4. SET NKF_EXE=C:\bin\nkf\nkf.exe
  5. SET MY_TEMP=%TEMP%
  6.  
  7. IF "%3" equ "" (
  8. ECHO したらば掲示板のスレッドにキーワードと一致するレスが書き込まれたら表示する
  9. ECHO chk_shitaraba {カテゴリー/板/スレッド} {初回取得範囲} {キーワード}
  10. ECHO カテゴリー/板/スレッド:https://jbbs.shitaraba.net/bbs/read.cgi/computer/10298/1571996375/
  11. ECHO             対象スレッドとする場合 computer/10298/1571996375 の部分
  12. ECHO 初回取得範囲:1-^1から), 500-(500レス以降), l100(最新100レス), l5(最新l5レス) など
  13. ECHO キーワード:任意の文字列(findstr用正規表現) 「.」を指定すると全レス表示
  14. ECHO CTRL+C で終了
  15. GOTO end
  16. )
  17. IF NOT EXIST %CURL_EXE% (
  18. ECHO %CURL_EXE% がみつかりません
  19. GOTO end
  20. )
  21. IF NOT EXIST %NKF_EXE% (
  22. ECHO %NKF_EXE% がみつかりません
  23. GOTO end
  24. )
  25. IF NOT EXIST %MY_TEMP% (
  26. ECHO 作業用ディレクトリ %MY_TEMP% がみつかりません
  27. GOTO end
  28. )
  29.  
  30. SET MY_WORK=%MY_TEMP%\chk_shitaraba
  31. IF NOT EXIST %MY_WORK% (
  32. MD %MY_WORK%
  33. )
  34.  
  35. ECHO 作業用ファイルが
  36. ECHO %MY_WORK%
  37. ECHO の中につくられ終了後も残ります
  38. ECHO 終了後には削除してかまいません
  39. ECHO.
  40. PAUSE
  41.  
  42. SET THREAD=%1
  43. SET GETRANGE=%2
  44. SET KEYWORD=%3
  45.  
  46. SET BASE_FILENAME=%THREAD:/=_%
  47.  
  48. ECHO. >"%MY_WORK%\%BASE_FILENAME%_last.txt"
  49. SET LAST_DATSIZE=-1
  50.  
  51. :loop_top
  52. %CURL_EXE%  -s http://jbbs.shitaraba.net/bbs/rawmode.cgi/%THREAD%/%GETRANGE% | %NKF_EXE% -s >"%MY_WORK%\%BASE_FILENAME%_res.txt"
  53.  
  54. CALL :FILESIZE "%MY_WORK%\%BASE_FILENAME%_res.txt"
  55. SET NEW_DATSIZE=%ERRORLEVEL%
  56. IF %NEW_DATSIZE%==0 GOTO loop_wait
  57.  
  58. findstr ^<title^>指定されたページまたはファイルは存在しません^<^/title^> "%MY_WORK%\%BASE_FILENAME%_res.txt" >"%MY_WORK%\%BASE_FILENAME%_404check.txt"
  59. CALL :FILESIZE "%MY_WORK%\%BASE_FILENAME%_404check.txt"
  60. IF NOT 0==%ERRORLEVEL% (
  61. ECHO %DATE% %TIME% ------------------------------
  62. ECHO 指定のスレッドは終了しているか存在していません
  63. DEL "%MY_WORK%\%BASE_FILENAME%_404check.txt"
  64. GOTO END
  65. )
  66. DEL "%MY_WORK%\%BASE_FILENAME%_404check.txt"
  67.  
  68. findstr /R %KEYWORD% "%MY_WORK%\%BASE_FILENAME%_res.txt" >"%MY_WORK%\%BASE_FILENAME%_new.txt"
  69.  
  70. fc "%MY_WORK%\%BASE_FILENAME%_last.txt" "%MY_WORK%\%BASE_FILENAME%_new.txt" >NUL 2>&1
  71. IF %errorlevel%==1 (
  72. ECHO %DATE% %TIME% ------------------------------
  73. TYPE "%MY_WORK%\%BASE_FILENAME%_new.txt"
  74. ECHO %DATE% %TIME% ------------------------------
  75. )
  76. DEL "%MY_WORK%\%BASE_FILENAME%_last.txt"  >NUL 2>&1
  77. REN "%MY_WORK%\%BASE_FILENAME%_new.txt" %BASE_FILENAME%_last.txt
  78.  
  79. REM %NEW_DATSIZE%は0の場合ここには来ない
  80. IF not %NEW_DATSIZE%==%LAST_DATSIZE% (
  81. CALL :UPDATE_GETRAGE
  82. SET LAST_DATSIZE=%NEW_DATSIZE%
  83. )
  84.  
  85. :loop_wait
  86. REM 30秒待機
  87. timeout 30 >NUL
  88. GOTO loop_top
  89.  
  90.  
  91. REM == サブルーチン ==
  92.  
  93. REM スレッド取得範囲の更新
  94. :UPDATE_GETRAGE
  95. ECHO.|SET /p =SET LASTNUM=>"%MY_WORK%\%BASE_FILENAME%_sub.bat"
  96. REM 全行取得し行数(最新レス番号)を得る
  97. %CURL_EXE%  -s http://jbbs.shitaraba.net/bbs/rawmode.cgi/%THREAD%/1- | find /V /C "">>"%MY_WORK%\%BASE_FILENAME%_sub.bat"
  98. CALL "%MY_WORK%\%BASE_FILENAME%_sub.bat"
  99. DEL "%MY_WORK%\%BASE_FILENAME%_sub.bat"
  100. REM 数字の前の空白を削除
  101. SET LASTNUM=%LASTNUM: =%
  102. REM 現在の最終レス番号をもとに次の取得開始レス番号を得る
  103. SET /a GETFROM=%LASTNUM%+1
  104. SET GETRANGE=%GETFROM%-
  105. REM ECHO LASTNUM=%LASTNUM%
  106. REM ECHO GETFROM=%GETFROM%
  107. REM ECHO GETRANGE=%GETRANGE%
  108. EXIT /b 0
  109.  
  110. REM ファイルサイズの取得
  111. :FILESIZE
  112. IF NOT EXIST %1 EXIT /b -1
  113. EXIT /b %~z1
  114.  
  115. REM 終了
  116. :end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement