craigslist-api 0.1.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.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +53 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +405 -0
  5. data/lib/craigslist/api/access_token.rb +68 -0
  6. data/lib/craigslist/api/area.rb +98 -0
  7. data/lib/craigslist/api/bulk_transport.rb +94 -0
  8. data/lib/craigslist/api/category.rb +47 -0
  9. data/lib/craigslist/api/client.rb +207 -0
  10. data/lib/craigslist/api/configuration.rb +130 -0
  11. data/lib/craigslist/api/connection.rb +54 -0
  12. data/lib/craigslist/api/credit_summary.rb +39 -0
  13. data/lib/craigslist/api/envelope.rb +65 -0
  14. data/lib/craigslist/api/errors.rb +82 -0
  15. data/lib/craigslist/api/image.rb +102 -0
  16. data/lib/craigslist/api/image_info.rb +53 -0
  17. data/lib/craigslist/api/json_transport.rb +153 -0
  18. data/lib/craigslist/api/money.rb +77 -0
  19. data/lib/craigslist/api/posting.rb +216 -0
  20. data/lib/craigslist/api/posting_block.rb +44 -0
  21. data/lib/craigslist/api/posting_handle.rb +142 -0
  22. data/lib/craigslist/api/posting_stats.rb +85 -0
  23. data/lib/craigslist/api/reference.rb +84 -0
  24. data/lib/craigslist/api/resources/account.rb +73 -0
  25. data/lib/craigslist/api/resources/base.rb +45 -0
  26. data/lib/craigslist/api/resources/billing.rb +47 -0
  27. data/lib/craigslist/api/resources/images.rb +104 -0
  28. data/lib/craigslist/api/resources/postings.rb +95 -0
  29. data/lib/craigslist/api/response_parser.rb +91 -0
  30. data/lib/craigslist/api/result.rb +123 -0
  31. data/lib/craigslist/api/result_set.rb +96 -0
  32. data/lib/craigslist/api/serializer.rb +177 -0
  33. data/lib/craigslist/api/token_provider.rb +80 -0
  34. data/lib/craigslist/api/version.rb +8 -0
  35. data/lib/craigslist/api/zip_location.rb +80 -0
  36. data/lib/craigslist/api.rb +63 -0
  37. metadata +127 -0
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Craigslist
4
+ module API
5
+ # Where a US ZIP code maps to on craigslist.
6
+ #
7
+ # Carries a subarea when the ZIP resolves to one. That matters more than it
8
+ # looks: subarea is required in every area that has subareas, and omitting
9
+ # it is the most common reason a posting comes back NOT_VALID.
10
+ #
11
+ # @example Feeding a posting directly
12
+ # place = client.area_for_zip("94110")
13
+ # place.area #=> "sfo"
14
+ # place.subarea #=> "sfc"
15
+ #
16
+ # Craigslist::API::Posting.new(**place.to_h, key: ..., title: ...)
17
+ class ZipLocation
18
+ # @return [String, nil] area abbreviation, e.g. "sfo"
19
+ attr_reader :area
20
+
21
+ # @return [String, nil] e.g. "SF bay area"
22
+ attr_reader :area_description
23
+
24
+ # @return [String, nil] subarea abbreviation, e.g. "sfc"
25
+ attr_reader :subarea
26
+
27
+ # @return [String, nil] e.g. "city of san francisco"
28
+ attr_reader :subarea_description
29
+
30
+ def initialize(area: nil, area_description: nil, subarea: nil, subarea_description: nil)
31
+ @area = area
32
+ @area_description = area_description
33
+ @subarea = subarea
34
+ @subarea_description = subarea_description
35
+ freeze
36
+ end
37
+
38
+ # Builds from the endpoint payload.
39
+ #
40
+ # The live API nests under "area" and "subarea". The published OpenAPI
41
+ # spec documents a flat shape instead, so both are accepted.
42
+ #
43
+ # @param data [Hash, nil]
44
+ # @return [ZipLocation]
45
+ def self.from(data)
46
+ data ||= {}
47
+ nested = data["area"]
48
+
49
+ if nested.is_a?(Hash)
50
+ sub = data["subarea"].is_a?(Hash) ? data["subarea"] : {}
51
+ new(
52
+ area: nested["abbreviation"],
53
+ area_description: nested["description"],
54
+ subarea: sub["abbreviation"],
55
+ subarea_description: sub["description"]
56
+ )
57
+ else
58
+ new(area: data["abbreviation"], area_description: data["description"])
59
+ end
60
+ end
61
+
62
+ # @return [Boolean] whether this ZIP resolved to a subarea
63
+ def subarea?
64
+ !subarea.nil?
65
+ end
66
+
67
+ # Posting keywords, ready to splat. Omits +:subarea+ when there is none,
68
+ # rather than passing an explicit nil.
69
+ #
70
+ # @return [Hash]
71
+ def to_h
72
+ subarea? ? {area: area, subarea: subarea} : {area: area}
73
+ end
74
+
75
+ def inspect
76
+ "#<#{self.class.name} area=#{area.inspect} subarea=#{subarea.inspect}>"
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "time"
4
+
5
+ require "craigslist/api/version"
6
+ require "craigslist/api/errors"
7
+
8
+ require "craigslist/api/connection"
9
+ require "craigslist/api/configuration"
10
+
11
+ require "craigslist/api/money"
12
+ require "craigslist/api/envelope"
13
+ require "craigslist/api/access_token"
14
+ require "craigslist/api/token_provider"
15
+ require "craigslist/api/json_transport"
16
+
17
+ require "craigslist/api/image"
18
+ require "craigslist/api/posting"
19
+ require "craigslist/api/serializer"
20
+ require "craigslist/api/result"
21
+ require "craigslist/api/result_set"
22
+ require "craigslist/api/response_parser"
23
+ require "craigslist/api/bulk_transport"
24
+
25
+ require "craigslist/api/image_info"
26
+ require "craigslist/api/posting_block"
27
+ require "craigslist/api/credit_summary"
28
+ require "craigslist/api/posting_stats"
29
+ require "craigslist/api/area"
30
+ require "craigslist/api/category"
31
+ require "craigslist/api/zip_location"
32
+ require "craigslist/api/reference"
33
+
34
+ require "craigslist/api/resources/base"
35
+ require "craigslist/api/resources/postings"
36
+ require "craigslist/api/resources/images"
37
+ require "craigslist/api/resources/billing"
38
+ require "craigslist/api/resources/account"
39
+
40
+ require "craigslist/api/posting_handle"
41
+ require "craigslist/api/client"
42
+
43
+ # Top-level namespace. This gem defines everything under {Craigslist::API}.
44
+ module Craigslist
45
+ # Ruby client for the Craigslist bulk posting platform.
46
+ #
47
+ # Access to bulk posting is granted by Craigslist on a case-by-case basis to
48
+ # high-volume posters, and is limited to paid US categories: jobs (offered),
49
+ # apartment rentals in NYC, and for-sale-by-dealer.
50
+ #
51
+ # @see Client the single entry point
52
+ module API
53
+ # Convenience constructor.
54
+ #
55
+ # client = Craigslist::API.new(email: ..., password: ..., account_id: ...)
56
+ #
57
+ # @see Client#initialize
58
+ # @return [Client]
59
+ def self.new(...)
60
+ Client.new(...)
61
+ end
62
+ end
63
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: craigslist-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Nick Chewning
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: faraday
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.9'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.9'
26
+ - !ruby/object:Gem::Dependency
27
+ name: faraday-multipart
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rexml
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.4'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.4'
54
+ description: |-
55
+ A single-client Ruby wrapper around both halves of Craigslist's bulk posting
56
+ platform: the RSS bulk interface used to create postings, and the JSON
57
+ Bulkpost API used to manage them afterwards. Handles OAuth2 token lifecycle,
58
+ XML serialization, and per-posting result reporting behind one object.
59
+ email:
60
+ - nchewning@gmail.com
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - CHANGELOG.md
66
+ - LICENSE.txt
67
+ - README.md
68
+ - lib/craigslist/api.rb
69
+ - lib/craigslist/api/access_token.rb
70
+ - lib/craigslist/api/area.rb
71
+ - lib/craigslist/api/bulk_transport.rb
72
+ - lib/craigslist/api/category.rb
73
+ - lib/craigslist/api/client.rb
74
+ - lib/craigslist/api/configuration.rb
75
+ - lib/craigslist/api/connection.rb
76
+ - lib/craigslist/api/credit_summary.rb
77
+ - lib/craigslist/api/envelope.rb
78
+ - lib/craigslist/api/errors.rb
79
+ - lib/craigslist/api/image.rb
80
+ - lib/craigslist/api/image_info.rb
81
+ - lib/craigslist/api/json_transport.rb
82
+ - lib/craigslist/api/money.rb
83
+ - lib/craigslist/api/posting.rb
84
+ - lib/craigslist/api/posting_block.rb
85
+ - lib/craigslist/api/posting_handle.rb
86
+ - lib/craigslist/api/posting_stats.rb
87
+ - lib/craigslist/api/reference.rb
88
+ - lib/craigslist/api/resources/account.rb
89
+ - lib/craigslist/api/resources/base.rb
90
+ - lib/craigslist/api/resources/billing.rb
91
+ - lib/craigslist/api/resources/images.rb
92
+ - lib/craigslist/api/resources/postings.rb
93
+ - lib/craigslist/api/response_parser.rb
94
+ - lib/craigslist/api/result.rb
95
+ - lib/craigslist/api/result_set.rb
96
+ - lib/craigslist/api/serializer.rb
97
+ - lib/craigslist/api/token_provider.rb
98
+ - lib/craigslist/api/version.rb
99
+ - lib/craigslist/api/zip_location.rb
100
+ homepage: https://github.com/biggeektx/craigslist-api-gem
101
+ licenses:
102
+ - MIT
103
+ metadata:
104
+ homepage_uri: https://github.com/biggeektx/craigslist-api-gem
105
+ source_code_uri: https://github.com/biggeektx/craigslist-api-gem/tree/v0.1.0
106
+ changelog_uri: https://github.com/biggeektx/craigslist-api-gem/blob/main/CHANGELOG.md
107
+ bug_tracker_uri: https://github.com/biggeektx/craigslist-api-gem/issues
108
+ documentation_uri: https://rubydoc.info/gems/craigslist-api/0.1.0
109
+ rubygems_mfa_required: 'true'
110
+ rdoc_options: []
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '3.3'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubygems_version: 3.6.9
125
+ specification_version: 4
126
+ summary: Ruby client for the Craigslist bulk posting APIs
127
+ test_files: []