Add a instagram DCGI for tags (completely based on user.dcgi) - gophercgis - Collection of gopher CGI/DCGI for geomyidae
(HTM) hg clone https://bitbucket.org/iamleot/gophercgis
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) changeset 2707ddb96f71a429799251acdfc7ce1800e5aecd
(DIR) parent 7d60365d6ec75e398efdf4f7b3dc044994e3cb20
(HTM) Author: Leonardo Taccari <iamleot@gmail.com>
Date: Sat, 23 Mar 2019 21:00:47
Add a instagram DCGI for tags (completely based on user.dcgi)
Diffstat:
instagram/tags.dcgi | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 105 insertions(+), 0 deletions(-)
---
diff -r 7d60365d6ec7 -r 2707ddb96f71 instagram/tags.dcgi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/instagram/tags.dcgi Sat Mar 23 21:00:47 2019 +0100
@@ -0,0 +1,105 @@
+#!/bin/sh
+
+. ../common/config.sh
+
+COMMENTS_CGI="${CGI_BASEDIR}/instagram/comments.cgi"
+CGI="${CGI_BASEDIR}/instagram/tags.dcgi"
+
+
+case "$2" in
+*/*/*/*)
+ # tag, id, rhx_gis and end_cursor are provided (next pages) (`data')
+ IFS=/ set -- "$2"
+ set -- $*
+ tag="$1"
+ id="$2"
+ rhx_gis="$3"
+ end_cursor="$4"
+ ;;
+*)
+ # only tag is provided (first page) (`profile')
+ tag="$2"
+ ;;
+esac
+
+
+profile_header='
+.entry_data.TagPage[] | .graphql.hashtag |
+ "t",
+ "t" + .name,
+ "t",
+'
+
+data_header='
+.data.hashtag |
+ "t",
+ "t" + "'"${tag}"'",
+ "t",
+'
+
+profile_footer='
+,
+if .entry_data.TagPage[].graphql.hashtag.edge_hashtag_to_media.page_info.has_next_page then
+ "[1|>> Next page|'"${CGI}?${tag}/"'" +
+ .entry_data.TagPage[].graphql.hashtag.id + "/" +
+ .rhx_gis + "/" +
+ .entry_data.TagPage[].graphql.hashtag.edge_hashtag_to_media.page_info.end_cursor +
+ "|server|port]"
+else
+ empty
+end
+'
+
+data_footer='
+,
+if .data.hashtag.edge_hashtag_to_media.page_info.has_next_page then
+ "[1|>> Next page|'"${CGI}?${tag}/${id}/${rhx_gis}/"'" +
+ .data.hashtag.edge_hashtag_to_media.page_info.end_cursor +
+ "|server|port]"
+else
+ empty
+end
+'
+
+
+if [ "${rhx_gis}" ] && [ "${end_cursor}" ]; then
+ header="${data_header}"
+ footer="${data_footer}"
+ variables='{"tag_name":"'"${tag}"'","first":12,"after":"'"${end_cursor}"'"}'
+ url="https://www.instagram.com/graphql/query/?query_hash=f92f56d47dc7a55b606908374b43a314&variables=${variables}"
+
+ #
+ # XXX: This was described in:
+ # XXX: <https://stackoverflow.com/questions/49786980/>
+ #
+ gis=$(printf "%s" "${rhx_gis}:${variables}" | md5 -q)
+
+ fetch_cmd() {
+ curl -H "X-Instagram-GIS: ${gis}" -Lgs -- "${url}"
+ }
+else
+ header="${profile_header}"
+ footer="${profile_footer}"
+ url="https://www.instagram.com/explore/tags/${tag}/"
+ fetch_cmd() {
+ curl -Lgs -- "${url}" |
+ sed -ne 's/;<\/script>$//' \
+ -e '/_sharedData =/s/^.*_sharedData = //p'
+ }
+fi
+
+fetch_cmd |
+jq -r '
+(
+'"${header}"'
+ ( .edge_hashtag_to_media.edges[] | .node |
+ (( "[h|[+] " + ( .taken_at_timestamp | strftime("%F %H:%M") ) + "|" +
+ "URL:" + .display_url + "|server|port]" ),
+ ( .edge_media_to_caption.edges[] | "t" + .node.text )),
+ "tLikes: " + ( .edge_media_preview_like.count | tostring ),
+ "[0|Comments: " + ( .edge_media_to_comment.count | tostring ) + "|" +
+ "'"${COMMENTS_CGI}"'?" + .shortcode + "|server|port]",
+ "t" )
+)
+'"${footer}"'
+'