social_media_posting_gem 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/social_media_posting_gem.rb +85 -0
  3. metadata +99 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 604caca3ea6b44f5abf248217a61cb7a22d05a21405ea3fe79475b044c3c0c43
4
+ data.tar.gz: d463710b58c89cafb18880e45b0a4eb50ce37962be25bab4c01561037d867383
5
+ SHA512:
6
+ metadata.gz: 07dd554561c00278045dfa5bab8ac05568f01b3117d4d99b62bd2f018c1ef9fa2c27fbe2eb784c08da7a1f728055fb009afd8488858f86fc581874710e046fe1
7
+ data.tar.gz: 8df9efc83f597c6e5dad3dea6b577d150d89e9898a7747f057215bb92eaa88eccdc2b139ba1fbe236035e199f34bd52be0eaaf064d21ab05d92863d3ac200ade
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'uri'
4
+ require 'net/http'
5
+ require 'nokogiri'
6
+ require 'open-uri'
7
+ require 'httparty'
8
+
9
+ class SocialMediaPosting
10
+
11
+ def initialize(access_token, page_id)
12
+ @access_token = access_token
13
+ @page_id = page_id
14
+ end
15
+
16
+ def publish_post(image, content, publish_on)
17
+ publish_facebook_post(@access_token, image, content) if publish_on == "facebook" || publish_on == "both"
18
+ publish_instagram_post(@access_token, image, content) if publish_on == "instagram" || publish_on == "both"
19
+ end
20
+
21
+ def publish_facebook_post(token, image, content)
22
+ post_id = get_facebook_post_id(token, image, content)
23
+ p "Post Published: ID: #{post_id}"
24
+ end
25
+
26
+ def get_facebook_post_id(token, image, content)
27
+ url = URI("https://graph.facebook.com/#{@page_id}/photos")
28
+ params = {
29
+ access_token: token,
30
+ url: image,
31
+ message: content
32
+ }
33
+ response = send_request(url, params, 'POST')
34
+ JSON.parse(response.body)['id']
35
+ end
36
+
37
+ def publish_instagram_post(token, image, content)
38
+ insta_id = get_insta_id(token)
39
+ container_id = get_container_id(token, image, content, insta_id)
40
+ post_id = get_insta_post_id(token, insta_id, container_id)
41
+ p "Post Published: ID: #{post_id}"
42
+ end
43
+
44
+ def get_insta_id(token)
45
+ url = URI("https://graph.facebook.com/#{@page_id}/?access_token=#{token}&fields=connected_instagram_account")
46
+ response = send_request(url, 'GET')
47
+ JSON.parse(response.body)['connected_instagram_account']['id']
48
+ end
49
+
50
+ def get_container_id(token, image, content, insta_id)
51
+ url = URI("https://graph.facebook.com/#{insta_id}/media")
52
+ params = {
53
+ access_token: token,
54
+ image_url: image,
55
+ caption: content
56
+ }
57
+ response = send_request(url, params, 'POST')
58
+ JSON.parse(response.body)['id']
59
+ end
60
+
61
+ def get_insta_post_id(token, insta_id, container_id)
62
+ url = URI("https://graph.facebook.com/#{insta_id}/media_publish")
63
+ params = {
64
+ access_token: token,
65
+ creation_id: container_id
66
+ }
67
+ response = send_request(url, params, 'POST')
68
+ JSON.parse(response.body)['id']
69
+ end
70
+
71
+ def send_request(url, params = {}, method = 'GET')
72
+ https = Net::HTTP.new(url.host, url.port)
73
+ https.use_ssl = true
74
+
75
+ if method == 'POST'
76
+ request = Net::HTTP::Post.new(url)
77
+ request.set_form_data(params)
78
+ else
79
+ request = Net::HTTP::Get.new(url)
80
+ end
81
+ request['Cookie'] = ENV['FACEBOOK_COOKIE']
82
+
83
+ https.request(request)
84
+ end
85
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: social_media_posting_gem
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
+ platform: ruby
6
+ authors:
7
+ - Lakhveer Singh Rajput
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-12-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.18.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.18.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.12.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.12.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ description: A gem for posting content to Facebook and Instagram
70
+ email:
71
+ - rajputlakhveer@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/social_media_posting_gem.rb
77
+ homepage: https://github.com/rajputlakhveer/social_media_posting
78
+ licenses: []
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubygems_version: 3.2.3
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: A gem for social media posting
99
+ test_files: []