twitter-lists-cli 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.
data/README.md CHANGED
@@ -4,11 +4,57 @@ A command-line client for manipulating large Twitter lists in the shell, shell s
4
4
 
5
5
  Currently supports
6
6
  ------------------
7
- - OAuth authentication
7
+ - OAuth authentication (twitter-auth)
8
8
  - Showing a users's followers/following
9
9
  - Following and unfollowing users
10
10
  - Showing, adding, and removing a members from a list
11
11
 
12
+ Commands included:
13
+ ------------------
14
+ ### twitter-auth
15
+ usage: twitter-auth
16
+ Get OAuth credentials.
17
+
18
+ Global Options:
19
+ --auth FILE Read authentication data from the specified FILE
20
+
21
+ ### twitter-follow
22
+ usage: twitter-follow [-l LISTNAME] [--only | -d] [USER...]
23
+ Follow or unfollow users.
24
+
25
+ -l, --list LISTNAME act on the specified LISTNAME instead of the logged-in user
26
+ -d, --unfollow unfollow the specified users
27
+
28
+ If no USERs are specified on the command line, they will be read from stdin.
29
+
30
+ Global Options:
31
+ --auth FILE Read authentication data from the specified FILE
32
+
33
+ ### twitter-following
34
+ usage: twitter-following [-r] [-u USER] [-l LISTNAME]
35
+ Show who is being followed by a user or a list.
36
+
37
+ -u, --user USER specify a username (default is the logged-in user)
38
+ -l, --list LISTNAME show members of the user's LISTNAME instead of the user's followers
39
+ -r, --reverse show followers instead of who is following
40
+
41
+ Global options:
42
+ --auth FILE Read authentication data from the specified FILE
43
+
44
+ ### twitter-lists
45
+ usage: twitter-lists [-s] [-u USER] [-c LISTNAME... | -C LISTNAME... | -d LISTNAME...]
46
+ Show, create, or delete lists.
47
+ -u, --user USER specify a username (default is the logged-in user)
48
+ -c, --create create the specified list(s)
49
+ -C, --create-private create private list(s)
50
+ -d, --delete delete the specified list(s)
51
+ -s, --slugs Use slugs instead of (possibly non-unique) names
52
+
53
+ If no LISTNAMEs are specified on the command line, they will be read from stdin.
54
+
55
+ Global options:
56
+ --auth FILE Read authentication data from the specified FILE
57
+
12
58
  License
13
59
  -------
14
60
  Copyright (c) 2010 Dwayne Litzenberger
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :patch: 0
3
3
  :major: 0
4
- :minor: 1
4
+ :minor: 2
5
5
  :build:
@@ -5,8 +5,8 @@ require 'twitter'
5
5
  # Parse arguments
6
6
  options = {:only => false, :unfollow=>false}
7
7
  OptionParser.new do |opts|
8
- opts.banner = "#{opts.program_name}"
9
- opts.separator "Get OAuth credentials"
8
+ opts.banner = "usage: #{opts.program_name}"
9
+ opts.separator "Get OAuth credentials."
10
10
  opts.separator ""
11
11
  opts.separator "Global Options:"
12
12
  opts.on("--auth FILE", "Read authentication data from the specified FILE") do |optarg|
@@ -5,8 +5,8 @@ require 'twitter'
5
5
  # Parse arguments
6
6
  options = {:only => false, :unfollow=>false}
7
7
  OptionParser.new do |opts|
8
- opts.banner = "#{opts.program_name} [-l LISTNAME] [--only | -d] [USER...]"
9
- opts.separator "Follow or unfollow users"
8
+ opts.banner = "usage: #{opts.program_name} [-l LISTNAME] [--only | -d] [USER...]"
9
+ opts.separator "Follow or unfollow users."
10
10
  opts.separator ""
11
11
  opts.on("-l", "--list LISTNAME", "act on the specified LISTNAME instead of the logged-in user") do |optarg|
12
12
  options[:list] = optarg
@@ -54,30 +54,34 @@ if options[:list]
54
54
  end
55
55
 
56
56
  options[:users].each do |user|
57
- if options[:list]
58
- if options[:unfollow]
59
- begin
60
- base.list_remove_member(options[:user], options[:list], user)
61
- rescue Twitter::TwitterError => e
62
- # Don't raise exception if the user is already removed
63
- raise unless e.data['error'] == "The user you are trying to remove from the list is not a member"
64
- end
65
- else
66
- base.list_add_member(options[:user], options[:list], user)
67
- end
68
- else
69
- if options[:unfollow]
70
- begin
71
- base.friendship_destroy(user)
72
- rescue Twitter::TwitterError => e
73
- raise unless e.data["error"] == "You are not friends with the specified user."
57
+ begin
58
+ if options[:list]
59
+ if options[:unfollow]
60
+ begin
61
+ base.list_remove_member(options[:user], options[:list], user)
62
+ rescue Twitter::TwitterError => e
63
+ # Don't raise exception if the user is already removed
64
+ raise unless e.data['error'] == "The user you are trying to remove from the list is not a member"
65
+ end
66
+ else
67
+ base.list_add_member(options[:user], options[:list], user)
74
68
  end
75
69
  else
76
- begin
77
- base.friendship_create(user, true)
78
- rescue Twitter::TwitterError => e
79
- raise unless e.data["error"] =~ /\ACould not follow user: (.* is already on your list\.|You've already requested to follow .*)\Z/
70
+ if options[:unfollow]
71
+ begin
72
+ base.friendship_destroy(user)
73
+ rescue Twitter::TwitterError => e
74
+ raise unless e.data["error"] == "You are not friends with the specified user."
75
+ end
76
+ else
77
+ begin
78
+ base.friendship_create(user, true)
79
+ rescue Twitter::TwitterError => e
80
+ raise unless e.data["error"] =~ /\ACould not follow user: (.* is already on your list\.|You've already requested to follow .*)\Z/
81
+ end
80
82
  end
81
83
  end
84
+ rescue Twitter::TwitterError => e
85
+ $stderr.puts "#{$0}: error: #{user}: #{e}"
82
86
  end
83
87
  end
@@ -5,12 +5,15 @@ require 'twitter'
5
5
  # Parse arguments
6
6
  options = {}
7
7
  OptionParser.new do |opts|
8
- opts.banner = "#{opts.program_name} [-r] [-u USER] [LISTNAME]"
9
- opts.separator "Show who is being followed by a user or a list"
8
+ opts.banner = "usage: #{opts.program_name} [-r] [-u USER] [-l LISTNAME]"
9
+ opts.separator "Show who is being followed by a user or a list."
10
10
  opts.separator ""
11
11
  opts.on("-u", "--user USER", "specify a username (default is the logged-in user)") do |optarg|
12
12
  options[:user] = optarg
13
13
  end
14
+ opts.on("-l", "--list LISTNAME", "show members of the user's LISTNAME instead of the user's followers") do |optarg|
15
+ options[:list] = optarg
16
+ end
14
17
  opts.on("-r", "--reverse", "show followers instead of who is following") do |optarg|
15
18
  options[:reverse] = optarg
16
19
  end
@@ -24,8 +27,7 @@ end.parse!
24
27
  options[:auth_file] ||= ENV["TWITTER_AUTHFILE"]
25
28
  options[:auth_file] ||= File.expand_path("~/.twitter")
26
29
  raise "No --auth file specified" unless options[:auth_file] # XXX TODO - output usage information
27
- raise "Too many arguments specified" if ARGV.length > 1 # XXX TODO - output usage information
28
- options[:list] = ARGV[0]
30
+ raise "Too many arguments specified" unless ARGV.empty? # XXX TODO - output usage information
29
31
 
30
32
  auth = YAML.load_file(options[:auth_file])
31
33
  oauth = Twitter::OAuth.new(auth["token"], auth["secret"])
@@ -3,16 +3,20 @@ require 'optparse'
3
3
  require 'twitter'
4
4
 
5
5
  # Parse arguments
6
- options = {:create => false, :delete => false}
6
+ options = {:create => false, :delete => false, :private => false}
7
7
  OptionParser.new do |opts|
8
- opts.banner = "#{opts.program_name} [-s] [-u USER] [-c LISTNAME... | -d LISTNAME...]"
9
- opts.separator "Show, create, or delete lists"
8
+ opts.banner = "usage: #{opts.program_name} [-s] [-u USER] [-c LISTNAME... | -C LISTNAME... | -d LISTNAME...]"
9
+ opts.separator "Show, create, or delete lists."
10
10
  opts.on("-u", "--user USER", "specify a username (default is the logged-in user)") do |optarg|
11
11
  options[:user] = optarg
12
12
  end
13
13
  opts.on("-c", "--create", "create the specified list(s)") do |optarg|
14
14
  options[:create] = true
15
15
  end
16
+ opts.on("-C", "--create-private", "create private list(s)") do |optarg|
17
+ options[:create] = true
18
+ options[:private] = true
19
+ end
16
20
  opts.on("-d", "--delete", "delete the specified list(s)") do |optarg|
17
21
  options[:delete] = true
18
22
  end
@@ -61,7 +65,11 @@ options[:user] ||= base.verify_credentials.screen_name
61
65
 
62
66
  if options[:create]
63
67
  options[:lists].each do |list|
64
- base.list_create(options[:user], :name => list)
68
+ if options[:private]
69
+ base.list_create(options[:user], :name => list, :mode => "private")
70
+ else
71
+ base.list_create(options[:user], :name => list)
72
+ end
65
73
  end
66
74
  elsif options[:delete]
67
75
  options[:lists].each do |list|
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Dwayne Litzenberger