wptools 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ddeb1b767f1426f863a2678bc9e6bf19bb2d2867d9146cc2c3a526acf8f8ee8
4
- data.tar.gz: 655dd3b03427e70da5478e5b0380413729451c65590136987a1a0c2ae45a9912
3
+ metadata.gz: 4525916f493bf92ca63072d790555c33121062bebd781e4cff04dc7322972824
4
+ data.tar.gz: a3c53d8f2c855fcc651059bae59d5b4a60c7949e906bd23b104511de0dd9677f
5
5
  SHA512:
6
- metadata.gz: 4252d06263fcb85268930604f4b317a14ad9630203429becedff3100e8c206e6538f04e62d32728472b376ca04a63948a99b1809f391190f048b9bdacedc5227
7
- data.tar.gz: 17bc9bb5d2ea5877372c11f864a3d79fd54f527396757b0182d301e77b29d8d3db1aae8f13079b5090a3270d798836b94d7bb4cd7e69bfd2ea2b683de53b0bcf
6
+ metadata.gz: a9c76877aa47f2cab544f93d58dc83e46fd2cf5ec0b5abbbfb06aa9d1aa57ab8b38d070786e100872bed70fb321dea5bc3bd31d3c587383666e799a3af14381a
7
+ data.tar.gz: 3aea5301d867def37ea02c01fe9221ade2d58a1fc9a2676c1e42f5e3954308f918b55bd877ba5b60aeed042f04e98abd03befe2ca56d908689d1e06a797e94eb
data/.gitignore CHANGED
@@ -12,6 +12,8 @@
12
12
  /config/*
13
13
  /data/*
14
14
  !/config/config_sample.yml
15
+ test*.sh
16
+ /exe/test*
15
17
 
16
18
 
17
19
 
data/.idea/wptools.iml CHANGED
@@ -267,4 +267,37 @@
267
267
  </library>
268
268
  </orderEntry>
269
269
  </component>
270
+ <component name="RakeTasksCache-v2">
271
+ <option name="myRootTask">
272
+ <RakeTaskImpl id="rake">
273
+ <subtasks>
274
+ <RakeTaskImpl description="Build wptools-0.1.0.gem into the pkg directory" fullCommand="build" id="build" />
275
+ <RakeTaskImpl id="build">
276
+ <subtasks>
277
+ <RakeTaskImpl description="Generate SHA512 checksum if wptools-0.1.0.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
278
+ </subtasks>
279
+ </RakeTaskImpl>
280
+ <RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
281
+ <RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
282
+ <RakeTaskImpl description="Build and install wptools-0.1.0.gem into system gems" fullCommand="install" id="install" />
283
+ <RakeTaskImpl id="install">
284
+ <subtasks>
285
+ <RakeTaskImpl description="Build and install wptools-0.1.0.gem into system gems without network access" fullCommand="install:local" id="local" />
286
+ </subtasks>
287
+ </RakeTaskImpl>
288
+ <RakeTaskImpl description="Create tag v0.1.0 and build and push wptools-0.1.0.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
289
+ <RakeTaskImpl description="Run tests" fullCommand="test" id="test" />
290
+ <RakeTaskImpl description="" fullCommand="default" id="default" />
291
+ <RakeTaskImpl description="" fullCommand="release" id="release" />
292
+ <RakeTaskImpl id="release">
293
+ <subtasks>
294
+ <RakeTaskImpl description="" fullCommand="release:guard_clean" id="guard_clean" />
295
+ <RakeTaskImpl description="" fullCommand="release:rubygem_push" id="rubygem_push" />
296
+ <RakeTaskImpl description="" fullCommand="release:source_control_push" id="source_control_push" />
297
+ </subtasks>
298
+ </RakeTaskImpl>
299
+ </subtasks>
300
+ </RakeTaskImpl>
301
+ </option>
302
+ </component>
270
303
  </module>
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- wptools (0.1.0)
4
+ wptools (0.2.0)
5
5
  activerecord
6
6
  mysql2
7
7
 
@@ -29,11 +29,13 @@ GEM
29
29
  concurrent-ruby (1.2.3)
30
30
  connection_pool (2.4.1)
31
31
  drb (2.2.1)
32
- i18n (1.14.1)
32
+ i18n (1.14.3)
33
33
  concurrent-ruby (~> 1.0)
34
+ racc (~> 1.7)
34
35
  minitest (5.22.2)
35
36
  mutex_m (0.2.0)
36
37
  mysql2 (0.5.6)
38
+ racc (1.7.3)
37
39
  rake (10.5.0)
38
40
  timeout (0.4.1)
39
41
  tzinfo (2.0.6)
data/README.md CHANGED
@@ -17,22 +17,40 @@ WordPressのテーブルを扱うスクリプト
17
17
 
18
18
  ### 記事一覧の表示
19
19
 
20
- - 以下のコマンドを実行
20
+ - 「--command=list」を指定すると記事一覧を表示する。「-l 10」で10件表示する。
21
21
  ```
22
- ./test_wptools.sh -l # 起動スクリプトを使う場合
22
+ ./run_wptools.sh --command=list -l 10 config/config_sample.yml
23
23
  ```
24
24
 
25
25
  ### バズった記事の表示
26
26
 
27
27
  - DBから取得したページ一覧とGoogleAnalyticsのCSVデータを突き合わせる
28
28
  - Googleアナリスティックスで「行動 > サイトコンテンツ > すべてのページ」を開く。
29
- -期間を月単位で指定して表示する行数を5000に。CSV形式でエクスポートを実行。
30
- - 以下のコマンドで実行
29
+ - 期間を月単位で指定して表示する行数を5000に。CSV形式でエクスポートを実行。
30
+ - 「--command=buzz」を指定するとバズった記事を表示する。「-b」でGoogleAnalyticsのCSVデータを指定する。
31
31
  ```
32
- ./test_wptools.sh -b data/Analytics_sablog_20200201-20200229.csv
32
+ ./run_wptools.sh --command=buzz data/Analytics_20200201-20200229.csv
33
33
  ```
34
34
  - 結果をGoogleスプレッドシートに貼り付け。貼り付けたあと右下のメニューから列を選択すればCSV形式になる。
35
35
 
36
+ ### DBを操作する
37
+
38
+ - 以下のようなrbスクリプト(test.rb)を作成。
39
+ ```ruby
40
+ require "wptools"
41
+
42
+ STDOUT.sync = true
43
+ Wptools::Command.run(ARGV)
44
+ Wptools::WpPost.published_posts.order(post_date: "DESC").limit(100).each do | post|
45
+ print "#{post.id} #{post.post_type} #{post.post_date_str} #{post.post_title} #{post.post_name}\n"
46
+ end
47
+
48
+ ```
49
+ - これを「--command=none」で呼び出す。
50
+ ```
51
+ ruby test.rb --command=none config/config_sample.yml
52
+ ```
53
+
36
54
 
37
55
  ## ライセンス
38
56
 
@@ -1,3 +1,3 @@
1
1
  module Wptools
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -4,6 +4,34 @@ require 'active_record'
4
4
 
5
5
  module Wptools
6
6
 
7
+ # +-----------------------+-----------------+------+-----+---------------------+----------------+
8
+ # | Field | Type | Null | Key | Default | Extra |
9
+ # +-----------------------+-----------------+------+-----+---------------------+----------------+
10
+ # | ID | bigint unsigned | NO | PRI | NULL | auto_increment |
11
+ # | post_author | bigint unsigned | NO | MUL | 0 | |
12
+ # | post_date | datetime | NO | | 0000-00-00 00:00:00 | |
13
+ # | post_date_gmt | datetime | NO | | 0000-00-00 00:00:00 | |
14
+ # | post_content | longtext | NO | MUL | NULL | |
15
+ # | post_title | mediumtext | NO | MUL | NULL | |
16
+ # | post_excerpt | mediumtext | NO | | NULL | |
17
+ # | post_status | varchar(20) | NO | | publish | |
18
+ # | comment_status | varchar(20) | NO | | open | |
19
+ # | ping_status | varchar(20) | NO | | open | |
20
+ # | post_password | varchar(255) | NO | | | |
21
+ # | post_name | varchar(200) | NO | MUL | | |
22
+ # | to_ping | mediumtext | NO | | NULL | |
23
+ # | pinged | mediumtext | NO | | NULL | |
24
+ # | post_modified | datetime | NO | | 0000-00-00 00:00:00 | |
25
+ # | post_modified_gmt | datetime | NO | | 0000-00-00 00:00:00 | |
26
+ # | post_content_filtered | longtext | NO | | NULL | |
27
+ # | post_parent | bigint unsigned | NO | MUL | 0 | |
28
+ # | guid | varchar(255) | NO | | | |
29
+ # | menu_order | int | NO | | 0 | |
30
+ # | post_type | varchar(20) | NO | MUL | post | |
31
+ # | post_mime_type | varchar(100) | NO | | | |
32
+ # | comment_count | bigint | NO | | 0 | |
33
+ # +-----------------------+-----------------+------+-----+---------------------+----------------+
34
+
7
35
  ##### wp_posts: 投稿などを保存
8
36
  # id: 投稿ID
9
37
  # post_title: タイトル
@@ -0,0 +1,19 @@
1
+ module Wptools
2
+ # +------------+---------------------+------+-----+---------+----------------+
3
+ # | Field | Type | Null | Key | Default | Extra |
4
+ # +------------+---------------------+------+-----+---------+----------------+
5
+ # | term_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
6
+ # | name | varchar(200) | NO | MUL | | |
7
+ # | slug | varchar(200) | NO | UNI | | |
8
+ # | term_group | bigint(10) | NO | | 0 | |
9
+ # +------------+---------------------+------+-----+---------+----------------+
10
+ #
11
+ # タグやカテゴリーの情報が保存されている
12
+ #
13
+ class WpTerm < ActiveRecord::Base
14
+ self.primary_key = 'term_id'
15
+ has_one :wp_term_taxonomy, foreign_key: :term_id
16
+ has_many :wp_term_relationships, through: :wp_term_taxonomy
17
+ has_many :wp_posts, through: :wp_term_relationships
18
+ end
19
+ end
@@ -1,7 +1,17 @@
1
1
  require 'active_record'
2
2
 
3
3
  module Wptools
4
+ # +------------------+---------------------+------+-----+---------+-------+
5
+ # | Field | Type | Null | Key | Default | Extra |
6
+ # +------------------+---------------------+------+-----+---------+-------+
7
+ # | object_id | bigint(20) unsigned | NO | PRI | 0 | |
8
+ # | term_taxonomy_id | bigint(20) unsigned | NO | PRI | 0 | |
9
+ # | term_order | int(11) | NO | | 0 | |
10
+ # +------------------+---------------------+------+-----+---------+-------+
11
+ # object_idとterm_taxonomy_idの組み合わせが主キー
12
+ #
4
13
  class WpTermRelationship < ActiveRecord::Base
14
+ self.primary_key = 'term_taxonomy_id'
5
15
  belongs_to :wp_post, foreign_key: :object_id
6
16
  belongs_to :wp_term_taxonomy, foreign_key: :term_taxonomy_id
7
17
  end
@@ -0,0 +1,40 @@
1
+ require 'active_record'
2
+
3
+ module Wptools
4
+ # +------------------+---------------------+------+-----+---------+----------------+
5
+ # | Field | Type | Null | Key | Default | Extra |
6
+ # +------------------+---------------------+------+-----+---------+----------------+
7
+ # | term_taxonomy_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
8
+ # | term_id | bigint(20) unsigned | NO | MUL | 0 | |
9
+ # | taxonomy | varchar(32) | NO | MUL | | |
10
+ # | description | longtext | NO | | NULL | |
11
+ # | parent | bigint(20) unsigned | NO | | 0 | |
12
+ # | count | bigint(20) | NO | | 0 | |
13
+ # +------------------+---------------------+------+-----+---------+----------------+
14
+ #
15
+ # サンプルデータ
16
+ # +------------------+---------+---------------+-------------+--------+-------+
17
+ # | term_taxonomy_id | term_id | taxonomy | description | parent | count |
18
+ # +------------------+---------+---------------+-------------+--------+-------+
19
+ # | 1 | 1 | category | | 0 | 451 |
20
+ # | 2 | 2 | link_category | | 0 | 7 |
21
+ # | 3 | 3 | category | | 0 | 4184 |
22
+ # | 37 | 34 | post_tag | | 0 | 2 |
23
+ # +------------------+---------+---------------+-------------+--------+-------+
24
+
25
+ # wp_termに格納されている情報がタグなのかカテゴリーなのか。あと親情報とか使用数とか
26
+
27
+ class WpTermTaxonomy < ActiveRecord::Base
28
+ self.table_name = 'wp_term_taxonomy'
29
+ belongs_to :wp_term, foreign_key: :term_id
30
+ has_many :wp_term_relationships, foreign_key: :term_taxonomy_id
31
+ has_many :wp_posts, through: :wp_term_relationships
32
+
33
+ scope :tags, -> { where(taxonomy: 'post_tag') }
34
+ scope :categories, -> { where(taxonomy: 'category') }
35
+
36
+ def list
37
+ wp_terms.map { |wp_term| { wp_term.slug => wp_term.name } }.flatten
38
+ end
39
+ end
40
+ end
data/lib/wptools.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  # coding: utf-8
2
2
  require "wptools/version"
3
3
  require "wptools/wp_post"
4
+ require "wptools/wp_term_relationship"
5
+ require "wptools/wp_term_taxonomy"
6
+ require "wptools/wp_term"
4
7
  require 'yaml'
5
8
  require 'optparse'
6
9
  require 'csv'
@@ -54,8 +57,10 @@ module Wptools
54
57
  end
55
58
  opt.on('-v', '--verbose', 'Verbose message') {|v| opts[:v] = v}
56
59
  opt.on('-n', '--dry-run', 'Message only') {|v| opts[:n] = v}
57
- opt.on('-l NUM', '--list NUM', 'List posts') {|v| opts[:l] = v.to_i}
58
- opt.on('-b DATAFILE', '--buzz DATAFILE', 'Buzz posts') {|v| opts[:b] = v }
60
+ commands = ['list', 'buzz', 'none']
61
+ opt.on('-c COMMAND', '--command=COMMAND', commands, commands.join('|')) {|v| opts[:c] = v}
62
+ opt.on('-l NUM', '--limit NUM', 'Limit number') {|v| opts[:l] = v.to_i}
63
+ opt.on('-d DATAFILE', '--data DATAFILE', 'CSV Datafile') {|v| opts[:d] = v }
59
64
  opt.parse!(argv)
60
65
  if argv.empty?
61
66
  puts opt.help
@@ -75,15 +80,15 @@ module Wptools
75
80
  end
76
81
 
77
82
  def run
78
- if @opts[:l]
83
+ if @opts[:c] == 'list'
79
84
  list(@opts[:l])
80
- elsif @opts[:b]
81
- buzz(@opts[:b])
85
+ elsif @opts[:c] == 'buzz'
86
+ buzz(@opts[:d])
87
+ elsif @opts[:c] == 'none'
82
88
  end
83
89
  end
84
90
 
85
91
  def list(num)
86
- p num
87
92
  WpPost.published_posts.order(post_date: "DESC").limit(num).each do | post|
88
93
  print "#{post.id} #{post.post_type} #{post.post_date_str} #{post.post_title} #{post.post_name}\n"
89
94
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wptools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - src
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-05 00:00:00.000000000 Z
11
+ date: 2024-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -110,8 +110,9 @@ files:
110
110
  - lib/wptools.rb
111
111
  - lib/wptools/version.rb
112
112
  - lib/wptools/wp_post.rb
113
+ - lib/wptools/wp_term.rb
113
114
  - lib/wptools/wp_term_relationship.rb
114
- - lib/wptools/wp_term_taxnomy.rb
115
+ - lib/wptools/wp_term_taxonomy.rb
115
116
  - run_wptools.sh
116
117
  - wptools.gemspec
117
118
  homepage: http://srcw.net/
@@ -1,17 +0,0 @@
1
- require 'active_record'
2
-
3
- module Wptools
4
- class WpTermTaxnomy < ActiveRecord::Base
5
- self.table_name = 'wp_term_taxonomy'
6
- has_many :wp_terms, foreign_key: :term_id
7
- has_many :wp_term_relationships, foreign_key: :term_taxonomy_id
8
- has_many :wp_posts, through: :wp_term_relationships
9
-
10
- scope :tags, -> { where(taxonomy: 'post_tag') }
11
- scope :categories, -> { where(taxonomy: 'category') }
12
-
13
- def list
14
- wp_terms.map { |wp_term| { wp_term.slug => wp_term.name } }.flatten
15
- end
16
- end
17
- end