Implementer training - Social media data sources
Funnelback has the ability to index content from the following social media services:
- 
YouTube 
- 
Facebook 
- 
Flickr 
- 
Twitter 
- 
Instagram (via the Instagram gatherer plugin) 
Additional services can be added by implementing a custom gatherer plugin.
There are a number of pre-requisites that must be satisfied before social media services can be indexed. These vary depending on the type of service, but generally involve having an account, channel/service identifier and API key for access to the service.
Tutorial: Download and index a YouTube channel
- 
Log in to the search dashboard where you are doing your training. See: Training - search dashboard access information if you’re not sure how to access the training. Ignore this step if you’re treating this as a non-interactive tutorial. 
- 
Create a new search package called Squiz. Skip the step where you are asked about adding data sources. 
- 
Once the search package is created scroll to the components section and click the create a data source button. 
- 
Create a data source with the following properties: - 
Data source type: youtube
- 
Data source name: Squiz videos
- 
YouTube API key: AIzaSyDBFGGkZfR79YsdSpw3jNzfRUgsvXVrVKo
- 
Channel IDs?: UC19PRS-wlngHv06TRnEQxDA
- 
Include channel’s liked videos?: no 
- 
Playlist IDs?: PLMOOwxQHsNyl—x_Nsyooa_gFFjOI3bUR
 
- 
- 
Update the data source by selecting update data source from the update panel. 
- 
Inspect the metadata mappings (settings panel, configure metadata mappings) and observe that a set of YouTube specific fields are automatically mapped. 
- 
Return to the Squiz search package and create a new results page called Squiz video search 
- 
Add some display options to display the YouTube metadata. Add the following to the query processor options (customize panel, edit results page configuration): -SF=[c,t,viewCount,likeCount,dislikeCount,duration,imageSmall] 
- 
Update the search template (select edit results page templates from the templates panel). Replace the contents of the <@s.Results>tag (approx line 495) with the following code:<#if s.result.class.simpleName == "TierBar"> <#-- A tier bar --> <#if s.result.matched != s.result.outOf> <li class="search-tier"><h3 class="text-muted">Results that match ${s.result.matched} of ${s.result.outOf} words</h3></li> <#else> <li class="search-tier"><h3 class="hidden">Fully-matching results</h3></li> </#if> <#-- Print event tier bars if they exist --> <#if s.result.eventDate??> <h2 class="fb-title">Events on ${s.result.eventDate?date}</h2> </#if> <#else> <li data-fb-result="${s.result.indexUrl}" class="result<#if !s.result.documentVisibleToUser>-undisclosed</#if> clearfix"> <h4 <#if !s.result.documentVisibleToUser>style="margin-bottom:4px"</#if>> <#if s.result.listMetadata["imageSmall"]?first??> <img class="img-thumbnail pull-left" style="margin-right:0.5em;" src="${s.result.listMetadata["imageSmall"]?first?replace("\\|.*$","","r")}" /> </#if> <#if question.currentProfileConfig.get("ui.modern.session")?boolean><a href="#" data-ng-click="toggle()" data-cart-link data-css="pushpin|remove" title="{{label}}"><small class="glyphicon glyphicon-{{css}}"></small></a></#if> <a href="${s.result.clickTrackingUrl}" title="${s.result.liveUrl}"> <@s.boldicize><@s.Truncate length=70>${s.result.title}</@s.Truncate></@s.boldicize> </a> <#if s.result.fileType!?matches("(doc|docx|ppt|pptx|rtf|xls|xlsx|xlsm|pdf)", "r")> <small class="text-muted">${s.result.fileType?upper_case} (${filesize(s.result.fileSize!0)})</small> </#if> <#if question.currentProfileConfig.get("ui.modern.session")?boolean && session?? && session.getClickHistory(s.result.indexUrl)??><small class="text-warning"><span class="glyphicon glyphicon-time"></span> <a title="Click history" href="#" class="text-warning" data-ng-click="toggleHistory()">Last visited ${prettyTime(session.getClickHistory(s.result.indexUrl).clickDate)}</a></small></#if> </h4> <p> <#if s.result.date??><small class="text-muted">${s.result.date?date?string("d MMM yyyy")}:</small></#if> <span class="search-summary"><@s.boldicize><#noautoesc>${s.result.listMetadata["c"]?first!"No description available."}</#noautoesc></@s.boldicize></span> </p> <p> <span class="glyphicon glyphicon-time"></span> ${s.result.listMetadata["duration"]?first!"N/A"} Views: ${s.result.listMetadata["viewCount"]?first!"N/A"} <span class="glyphicon glyphicon-thumbs-up"></span> ${s.result.listMetadata["likeCount"]?first!"N/A"} </p> </li> </#if>
- 
Run a search for !showall and observe the YouTube results: 
Extended exercises: social media
- 
Find a YouTube channel and determine the channel ID. Add this as a second channel ID and update the data source. 
- 
Set up a new social media data source using one of the other templates (such as Facebook or Twitter). To do this you will need an appropriate API key for the repository and a channel to consume. 
- 
Index an Instagram feed using the Instagram custom gatherer. Hint: you will require a custom data source for this and will also need to enable the Instagram custom gatherer plugin on this data source.