goldfinch / socialkit
Facebook/Instagram API (META) integration for Silverstripe
Installs: 752
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 1
Type:silverstripe-vendormodule
Requires
- php: >=8.0
- dnadesign/silverstripe-elemental: ^5.0
- goldfinch/date: ^1.0
- goldfinch/helpers: ^2.0
- goldfinch/silverstripe-jsontext: ^2.1
- guzzlehttp/guzzle: ^7.7
- jonom/silverstripe-someconfig: ^1.0
- lekoala/silverstripe-encrypt: dev-master
- silverstripe/admin: ^2.0
- silverstripe/crontask: ^3.0
- silverstripe/framework: ^5.0
- unclecheese/display-logic: ^3.0
README
Social media Meta Integration for Silverstripe. Fetch and display Facebook/Instagram posts as a feed on your website. Easy to customize.
Install
composer require goldfinch/social-media
1. Create Meta App
developers.facebook.com/apps/creation
2. Generate encryption key
All sensitive data that comes from Meta (ID,secret,tokens) are being encrypted in the database. Therefore we need a key. You can generate it using Taz🌪️ module by running CLI command:
php taz generate:encryption-key
or dumping helper function
LeKoala\Encrypt\EncryptHelper::generateKey();
3. Save the key in .env
ENCRYPTION_KEY={mykey}
4. Set up a Facebook Feed
-
Open Social media admin module that comes with this package
/admin/social-media
and navigate to Settings > API -
Enable Facebook API (checkbox)
-
Set up the following fields:
-
App ID
Go to developers.facebook.com/apps/MYAPPID/settings/basic
Get App ID
-
App Secret
Go to developers.facebook.com/apps/MYAPPID/settings/basic
Get App secret
-
Page ID
Go to www.facebook.com/MYPAGE/about_profile_transparency
Page transparency reveals Page ID
-
Access Token
Go to developers.facebook.com/tools/explorer
Select Meta App, User Token, with
pages_manage_posts
permission and Generate Access Token -
Fields: developers.facebook.com/docs/graph-api/reference/v18.0/page/feed#readfields
See all fields that you can copy and paste here
-
Limit:
Set post limit (for sync),
10
-
✅ Make sure to Save it. All set to go 🎉
To get Long-Lived Access Token click Get button or run /dev/tasks/SocialMediaToken
To fetch posts, run the task by clicking the Sync button on the same page or jump on /dev/tasks/SocialMediaSync
5. Set up an Instagram Feed
-
Open Social media admin module that comes with this package
/admin/social-media
and navigate to Settings > API -
Enable Instagram API (checkbox)
-
Set up the following fields:
-
App Secret
Go to developers.facebook.com/apps/MYAPPID/instagram-basic-display/basic-display
Get Instagram App Secret
-
Long-Lived Access Token
Go to developers.facebook.com/apps/MYAPPID/instagram-basic-display/basic-display
Get Get token (User Token Generator) - Add or Remove Instagram Testers
-
Fields: developers.facebook.com/docs/instagram-basic-display-api/reference/media/#fields
See all fields that you can copy and paste here
-
Limit:
Set post limit (for sync),
10
-
✅ Make sure to Save it. All set to go 🎉
To fetch posts, run the task by clicking the Sync button on the same page or jump on /dev/tasks/SocialMediaSync
Cron tasks
You might want to set up cron tasks for automation
/dev/tasks/SocialMediaRefresh # refresh token once in 4 weeks /dev/tasks/SocialMediaSync # once in hour (or as you wish)
Usage
Mixed social feed with Facebook & Instagram posts (sorted by post date)
$SocialFeed
Facebook feed only
$SocialFeed.FacebookFeed $SocialFeed.FacebookFeed(15)
Facebook posts as ArrayList
<% loop $SocialFeed.FacebookPosts %> <% loop $SocialFeed.FacebookPosts(15) %>
Instagram feed only
$SocialFeed.InstagramFeed $SocialFeed.InstagramFeed(15)
Instagram posts as ArrayList
<% loop $SocialFeed.InstagramPosts %> <% loop $SocialFeed.InstagramPosts(15) %>
Templates and modifications
To modify templates for your needs, copy them into your templates folder. Use Taz command that does that for you
If you haven't used Taz🌪️ before, taz file must be presented in your root project folder cp vendor/goldfinch/taz/taz taz
php taz vendor:social-media:templates
Elemental Block
If you use silverstripe-elemental, this module comes with Social Media block that handles social feeds for you
Useful data
Social link fields
You can also store social links with this module Social media > Main
<% with SocialMediaConfig %> <% if GeneralFacebook %> <a href="{$GeneralFacebookURL}" target="_blank" rel="nofollow">Facebook</a> <% end_if %> <% if GeneralInstagram %> <a href="{$GeneralInstagramURL}" target="_blank" rel="nofollow">Instagram</a> <% end_if %> <%-- same for Twitter, LinkedIn, YouTube --%> <% end_with %>
Instagram fields
caption,id,is_shared_to_feed, media_type,media_url,permalink,thumbnail_url,timestamp,username,children
Facebook fields
id,actions,admin_creator,allowed_advertising_objects,application,attachments,backdated_time,call_to_action,can_reply_privately,child_attachments,created_time,feed_targeting,from,full_picture,icon,instagram_eligibility,is_eligible_for_promotion,is_expired,is_hidden,is_instagram_eligible,is_popular,is_published,is_spherical,message,message_tags,parent_id,permalink_url,place,privacy,promotable_id,properties,sheduled_publish_time,shares,status_type,story,story_tags,subscribed,targeting,to,updated_time,video_buying_eligibility,likes.summary(total_count),comments.summary(total_count),reactions.summary(total_count)
Previews
API settings
Demo social feed output
License
The MIT License (MIT)