Skip to content

Instantly share code, notes, and snippets.

@DeepakSuryaS
Created September 18, 2017 19:52
Show Gist options
  • Save DeepakSuryaS/27b5311bb4a1755dd95ab994eaa4abb9 to your computer and use it in GitHub Desktop.
Save DeepakSuryaS/27b5311bb4a1755dd95ab994eaa4abb9 to your computer and use it in GitHub Desktop.
twitch.tv_api
<div class="main" style="background-color: #FF1744;">
<div class="container">
<div class="twelve columns">
<div class="app">
<div class="header">
<div class="row">
<div class="one-half column">
<h1 class="headline">twitch<span>.</span>tv</h1>
</div>
<div class="one-half column">
<div class="search">
<form action="">
<input type="search" class="search-twitch" placeholder="Search username">
<div class="search-twitch-btn"></div>
</form>
</div>
</div>
</div>
</div>
<div class="status">
<div class="row">
<div class="one-third column"><button class="all-users focus" id="all-users">All</button></div>
<div class="one-third column"><button class="online-users">Online</button></div>
<div class="one-third column"><button class="offline-users">Offline</button></div>
</div>
</div>
<section class="online"></section>
<section class="offline"></section>
<section class="unavailable"></section>
</div>
<div class="row">
<div class="footer">
<p>Designed and coded by <a href="http://ideepaksuryas.me/">Deepak Surya S</a></p>
</div>
</div>
</div>
</div>
</div>
window.onload = function () {
//Define variables
var status, url, picture, x = 0;
var twitchStreamers = ["dreamhackcs", "skyzhar", "freecodecamp", "faceittv", "comster404", "brunofin", "terakilobyte", "robotcaleb", "sheevergaming", "esl_sc2", "jacksofamerica"];
//Define functions
function updateHTML (section) {
$(section).append('<div class="twitch"><div class="row"><div class="one-third column"><div class="image-holder" id="user-image-' + x + '"></div></div><div class="two-thirds column"><span class="status-message">' + status + '</span></div></div></div>');
if (section == ".online" || section == ".offline") { //If users are online or offline, load profile images
$("#user-image-" + x).css({
background: picture,
'background-size': '55px'
});
}
x++;
}
function updateOfflineUsers () { //If users are offline, make new ajax request to find user info
$.ajax({
url: "https://wind-bow.gomix.me/twitch-api/channels/" + url,
dataType: "jsonp",
data: {format: "json"},
success: function (json) {
status = "Channel " + "'<a href='" + json.url + "' target='_blank'" + "'>" + json.display_name + "</a>'" + " is currently offline";
if (json.logo !== null) {
picture = 'url("' + json.logo + '")';
}
else {
picture = 'url("https://i.vimeocdn.com/portrait/10159238_300x300")';
}
updateHTML(".offline");
}
});
}
function fetchData (data) {
console.log(data);
if (data.stream === null) {
url = data._links.channel.substr(38);
updateOfflineUsers();
}
else if (data.status == 422 || data.status == 404) {
status = data.message;
updateHTML(".unavailable");
}
else {
if (data.stream.channel.logo !== null) {
picture = 'url("' + data.stream.channel.logo + '")';
}
else {
picture = 'url("https://i.vimeocdn.com/portrait/10159238_300x300")';
}
url = data._links.channel.substr(38);
status = "<a href='https://wind-bow.gomix.me/twitch-api/" + url + "' target='_blank'" + "'>" + data.stream.channel.display_name + "</a>" + " is currently streaming " + data.stream.game;
updateHTML(".online");
}
}
function ajax () {
$.ajax({
url: "https://wind-bow.gomix.me/twitch-api/streams/" + twitchStreamers[i] + "?callback=?",
dataType: "jsonp",
data: {
format: "json"
},
success: function (data) {
fetchData(data);
},
error: function () {
console.log("unable to access json");
}
});
}
function showOnline () { //Show only online users
$(".offline-users, .all-users").removeClass('focus');
$(".online-users").addClass('focus');
$(".offline, .unavailable").addClass('hidden');
$(".online").removeClass('hidden');
}
function showOffline () { //Show only offline users
$(".online-users, .all-users").removeClass('focus');
$(".offline-users").addClass('focus');
$(".offline, .unavailable").removeClass('hidden');
$(".online").addClass('hidden');
}
function showAll () { //Show all users
$(".offline-users, .online-users").removeClass('focus');
$(".all-users").addClass('focus');
$(".online, .offline, .unavailable").removeClass('hidden');
}
//Loop
for (var i = 0; i < twitchStreamers.length; i++) {
ajax();
}
//Search Function
function search () {
$(".online, .offline, .unavailable").empty();
showAll();
var searchQuery = $(".search-twitch").val();
var user = searchQuery.replace(/[^A-Z0-9_]/ig, "");
$.ajax({
url: "https://wind-bow.gomix.me/twitch-api/streams/" + user,
dataType: "jsonp",
data: {
format: "json"
},
success: function (data) {
fetchData(data);
}
});
}
$(".search-twitch-btn").click(function () {
search();
});
$(".search-twitch").keypress(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
search();
}
});
//Buttons
$(".online-users").click(function () {
showOnline();
});
$(".offline-users").click(function () {
showOffline();
});
$(".all-users").click(function () {
showAll();
});
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
html {
font-family: sans-serif;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%; }
body {
margin: 0; }
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block; }
audio,
canvas,
progress,
video {
display: inline-block;
vertical-align: baseline; }
audio:not([controls]) {
display: none;
height: 0; }
[hidden],
template {
display: none; }
a {
background-color: transparent; }
a:active {
outline: 0; }
a:hover {
outline: 0; }
abbr[title] {
border-bottom: 1px dotted; }
b,
strong {
font-weight: bold; }
dfn {
font-style: italic; }
h1 {
font-size: 2em;
margin: 0.67em 0; }
mark {
background: #ff0;
color: #000; }
small {
font-size: 80%; }
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline; }
sup {
top: -0.5em; }
sub {
bottom: -0.25em; }
img {
border: 0; }
svg:not(:root) {
overflow: hidden; }
figure {
margin: 1em 40px; }
hr {
box-sizing: content-box;
height: 0; }
pre {
overflow: auto; }
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em; }
button,
input,
optgroup,
select,
textarea {
color: inherit;
font: inherit;
margin: 0; }
button {
overflow: visible; }
button,
select {
text-transform: none; }
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer; }
button[disabled],
html input[disabled] {
cursor: default; }
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0; }
input {
line-height: normal; }
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0; }
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto; }
input[type="search"] {
-webkit-appearance: textfield;
box-sizing: content-box; }
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none; }
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em; }
legend {
border: 0;
padding: 0; }
textarea {
overflow: auto; }
optgroup {
font-weight: bold; }
table {
border-collapse: collapse;
border-spacing: 0; }
td,
th {
padding: 0; }
/*
* Skeleton V2.0.4
* Copyright 2014, Dave Gamache
* www.getskeleton.com
* Free to use under the MIT license.
* https://www.opensource.org/licenses/mit-license.php
* 12/9/2014
* Sass Version by Seth Coelen https://github.com/whatsnewsaes
*/
html {
font-size: 62.5%; }
body {
font-size: 1.5em;
line-height: 1.6;
font-weight: 400;
font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #222; }
a {
color: #1eaedb; }
a:hover {
color: #1b9cc5; }
hr {
margin-top: 3rem;
margin-bottom: 3.5rem;
border-width: 0;
border-top: 1px solid #e1e1e1; }
.u-full-width {
width: 100%;
box-sizing: border-box; }
.u-max-full-width {
max-width: 100%;
box-sizing: border-box; }
.u-pull-right {
float: right; }
.u-pull-left {
float: left; }
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 2rem;
font-weight: 300; }
h1 {
font-size: 4.0rem;
line-height: 1.2;
letter-spacing: -.1rem; }
h2 {
font-size: 3.6rem;
line-height: 1.25;
letter-spacing: -.1rem; }
h3 {
font-size: 3.0rem;
line-height: 1.3;
letter-spacing: -.1rem; }
h4 {
font-size: 2.4rem;
line-height: 1.35;
letter-spacing: -.08rem; }
h5 {
font-size: 1.8rem;
line-height: 1.5;
letter-spacing: -.05rem; }
h6 {
font-size: 1.5rem;
line-height: 1.6;
letter-spacing: 0; }
@media (min-width: 550px) {
h1 {
font-size: 5.0rem; }
h2 {
font-size: 4.2rem; }
h3 {
font-size: 3.6rem; }
h4 {
font-size: 3.0rem; }
h5 {
font-size: 2.4rem; }
h6 {
font-size: 1.5rem; } }
p {
margin-top: 0; }
/* Modules */
/*
* Skeleton V2.0.4
* Copyright 2014, Dave Gamache
* www.getskeleton.com
* Free to use under the MIT license.
* https://www.opensource.org/licenses/mit-license.php
* 12/9/2014
* Sass Version by Seth Coelen https://github.com/whatsnewsaes
*/
.container {
position: relative;
width: 100%;
margin: 0 auto;
padding: 0 20px;
box-sizing: border-box; }
.column,
.columns {
width: 100%;
float: left;
box-sizing: border-box; }
@media (min-width: 400px) {
.container {
width: 85%;
padding: 0; } }
@media (min-width: 550px) {
.container {
width: 80%; }
.column,
.columns {
margin-left: 4%; }
.column:first-child,
.columns:first-child {
margin-left: 0; }
.one.column,
.one.columns {
width: 4.66667%; }
.two.columns {
width: 13.33333%; }
.three.columns {
width: 22%; }
.four.columns {
width: 30.66667%; }
.five.columns {
width: 39.33333%; }
.six.columns {
width: 48%; }
.seven.columns {
width: 56.66667%; }
.eight.columns {
width: 65.33333%; }
.nine.columns {
width: 74%; }
.ten.columns {
width: 82.66667%; }
.eleven.columns {
width: 91.33333%; }
.twelve.columns {
width: 100%;
margin-left: 0; }
.one-third.column {
width: 30.66667%; }
.two-thirds.column {
width: 65.33333%; }
.one-half.column {
width: 48%; }
.offset-by-one.column,
.offset-by-one.columns {
margin-left: 8.66667%; }
.offset-by-two.column,
.offset-by-two.columns {
margin-left: 17.33333%; }
.offset-by-three.column,
.offset-by-three.columns {
margin-left: 26%; }
.offset-by-four.column,
.offset-by-four.columns {
margin-left: 34.66667%; }
.offset-by-five.column,
.offset-by-five.columns {
margin-left: 43.33333%; }
.offset-by-six.column,
.offset-by-six.columns {
margin-left: 52%; }
.offset-by-seven.column,
.offset-by-seven.columns {
margin-left: 60.66667%; }
.offset-by-eight.column,
.offset-by-eight.columns {
margin-left: 69.33333%; }
.offset-by-nine.column,
.offset-by-nine.columns {
margin-left: 78%; }
.offset-by-ten.column,
.offset-by-ten.columns {
margin-left: 86.66667%; }
.offset-by-eleven.column,
.offset-by-eleven.columns {
margin-left: 95.33333%; }
.offset-by-one-third.column,
.offset-by-one-third.columns {
margin-left: 34.66667%; }
.offset-by-two-thirds.column,
.offset-by-two-thirds.columns {
margin-left: 69.33333%; }
.offset-by-one-half.column,
.offset-by-one-half.column {
margin-left: 52%; } }
.container:after,
.row:after,
.u-cf {
content: "";
display: table;
clear: both; }
.button,
button {
display: inline-block;
height: 38px;
padding: 0 30px;
color: #555555;
text-align: center;
font-size: 11px;
font-weight: 600;
line-height: 38px;
letter-spacing: .1rem;
text-transform: uppercase;
text-decoration: none;
white-space: nowrap;
background-color: transparent;
transition-duration: .4s;
border: 1px solid #bbb;
cursor: pointer;
box-sizing: border-box; }
input[type="submit"], input[type="reset"], input[type="button"] {
display: inline-block;
height: 38px;
padding: 0 30px;
color: #555555;
text-align: center;
font-size: 11px;
font-weight: 600;
line-height: 38px;
letter-spacing: .1rem;
text-transform: uppercase;
text-decoration: none;
white-space: nowrap;
background-color: transparent;
border-radius: 4px;
border: 1px solid #bbb;
cursor: pointer;
box-sizing: border-box; }
.button:hover,
button:hover {
color: #fff;
background-color: #673AB7;
transition-duration: .4s;
outline: 0; }
input[type="submit"]:hover, input[type="reset"]:hover, input[type="button"]:hover {
color: #333;
border-color: #888888;
outline: 0; }
.button:focus,
button:focus {
color: #333;
border-color: #888888;
outline: 0; }
input[type="submit"]:focus, input[type="reset"]:focus, input[type="button"]:focus {
color: #333;
border-color: #888888;
outline: 0; }
.button.button-primary,
button.button-primary {
color: #fff;
background-color: #33c3f0;
border-color: #33c3f0; }
input[type="submit"].button-primary, input[type="reset"].button-primary, input[type="button"].button-primary {
color: #fff;
background-color: #33c3f0;
border-color: #33c3f0; }
.button.button-primary:hover,
button.button-primary:hover {
color: #fff;
background-color: #1eaedb;
border-color: #1eaedb; }
input[type="submit"].button-primary:hover, input[type="reset"].button-primary:hover, input[type="button"].button-primary:hover {
color: #fff;
background-color: #1eaedb;
border-color: #1eaedb; }
.button.button-primary:focus,
button.button-primary:focus {
color: #fff;
background-color: #1eaedb;
border-color: #1eaedb; }
input[type="submit"].button-primary:focus, input[type="reset"].button-primary:focus, input[type="button"].button-primary:focus {
color: #fff;
background-color: #1eaedb;
border-color: #1eaedb; }
input[type="email"], input[type="number"], input[type="search"], input[type="text"], input[type="tel"], input[type="url"], input[type="password"] {
height: 38px;
padding: 6px 10px;
background-color: #fff;
border: 1px solid #d1d1d1;
border-radius: 4px;
box-shadow: none;
box-sizing: border-box; }
textarea,
select {
height: 38px;
padding: 6px 10px;
background-color: #fff;
border: 1px solid #d1d1d1;
border-radius: 4px;
box-shadow: none;
box-sizing: border-box; }
input[type="email"], input[type="number"], input[type="search"], input[type="text"], input[type="tel"], input[type="url"], input[type="password"] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none; }
textarea {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
min-height: 65px;
padding-top: 6px;
padding-bottom: 6px; }
input[type="email"]:focus, input[type="number"]:focus, input[type="search"]:focus, input[type="text"]:focus, input[type="tel"]:focus, input[type="url"]:focus, input[type="password"]:focus {
border: 1px solid #33c3f0;
outline: 0; }
textarea:focus,
select:focus {
border: 1px solid #33c3f0;
outline: 0; }
label,
legend {
display: block;
margin-bottom: .5rem;
font-weight: 600; }
fieldset {
padding: 0;
border-width: 0; }
input[type="checkbox"], input[type="radio"] {
display: inline; }
label > .label-body {
display: inline-block;
margin-left: .5rem;
font-weight: normal; }
ul {
list-style: circle inside; }
ol {
list-style: decimal inside;
padding-left: 0;
margin-top: 0; }
ul {
padding-left: 0;
margin-top: 0; }
ul ul, ul ol {
margin: 1.5rem 0 1.5rem 3rem;
font-size: 90%; }
ol ol, ol ul {
margin: 1.5rem 0 1.5rem 3rem;
font-size: 90%; }
li {
margin-bottom: 1rem; }
code {
padding: .2rem .5rem;
margin: 0 .2rem;
font-size: 90%;
white-space: nowrap;
background: #f1f1f1;
border: 1px solid #e1e1e1;
border-radius: 4px; }
pre > code {
display: block;
padding: 1rem 1.5rem;
white-space: pre; }
th,
td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid #e1e1e1; }
th:first-child,
td:first-child {
padding-left: 0; }
th:last-child,
td:last-child {
padding-right: 0; }
button,
.button {
margin-bottom: 1rem; }
input,
textarea,
select,
fieldset {
margin-bottom: 1.5rem; }
pre,
blockquote,
dl,
figure,
table,
p,
ul,
ol,
form {
margin-bottom: 2.5rem; }
body {
text-align: center;
background-color: #ECF0E7; }
.app {
margin: 1em 0;
border: 1px solid #333;
overflow: hidden;
background-color: #fff; }
.header {
text-align: center;
text-transform: uppercase;
border-bottom: 1px solid #efefef;
padding: 10px 0 0; }
.headline {
margin-left: 30px;
color: #FF1744;
text-align: left;
font-size: 3em;
font-family: "Ubuntu", sans-serif;
font-weight: 900;
padding: 5px 10px 0px ; }
.headline span {
color: #7550BA; }
.search {
margin: 0 0 0; }
form {
margin-bottom: 1em; }
input[type="search"] {
float: left;
display: inline-block;
width: 80%;
border: 1px solid #673AB7;
border-radius: 0px; }
.search-twitch-btn {
width: 38px;
height: 38px;
float: left;
border: 0px;
background: url("http://www.endlessicons.com/wp-content/uploads/2015/08/search-icon-2.png");
background-color: #673AB7;
background-size: cover; }
.status {
padding-top: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #efefef; }
button {
width: 80%; }
.online .twitch {
background-color: #2ECC71; }
.offline .twitch {
background-color: #FFF; }
.unavailable .twitch {
background-color: #FFF; }
.twitch {
text-align: left;
margin-left: 0.2em;
margin-right: 0.2em;
margin-top: 0.2em;
background-color: #efefef;
line-height: 70px; }
.twitch .one-third.column {
width: 22%; }
.twitch .two-thirds.column {
width: 74%; }
.image-holder {
width: 55px;
height: 55px;
margin: 7.5px 10px;
margin-left: 20px;
float: left;
background-size: cover; }
.status-message {
font-size: 16px;
display: inline-block;
vertical-align: middle;
line-height: normal; }
a {
text-decoration: none;
color: #fff;
border: 1px solid #673AB7;
background-color: #673AB7;}
a:hover {
color: #000;
text-decoration: underline; }
.hidden {
display: none; }
.focus {
background-color: #7550BA;
color: #fff; }
.focus:hover, .focus:focus {
color: #fff; }
@media screen and (max-width: 550px) {
.headline {
text-align: center; }
.search {
width: 80%;
margin: 0 auto; }
.twitch {
text-align: center; }
.image-holder {
margin: 7.5px auto 5px;
float: none; }
span {
padding: 10px 10px; } }
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment