Skip to content

Instantly share code, notes, and snippets.

@ZacharyDinerstein
Last active December 31, 2015 09:19
Show Gist options
  • Save ZacharyDinerstein/7966499 to your computer and use it in GitHub Desktop.
Save ZacharyDinerstein/7966499 to your computer and use it in GitHub Desktop.
Music Brainzzzz app.rb
require 'bundler/setup'
Bundler.require(:default)
require 'musicbrainz'
require 'lastfm'
MusicBrainz.configure do |c|
# Application identity (required)
c.app_name = "BRAINZZZZ"
c.app_version = "1.0"
c.contact = "support@mymusicapp.com"
end
get '/' do
erb :index
end
post '/' do
artist = params[:artist]
@result = MusicBrainz::Artist.find_by_name(artist)
@artist_id = @result.id
artist_1_url = "http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&mbid=#{@artist_id}&api_key=0f24ee5b7c24a21c0e32d8599ba0596a&format=json"
@artist_1 = HTTParty.get(artist_1_url)
artist_1_top_tracks_url = "http://ws.audioscrobbler.com/2.0/?method=artist.gettoptracks&mbid=#{@artist_id}&api_key=0f24ee5b7c24a21c0e32d8599ba0596a&format=json"
@artist_1_top_tracks = HTTParty.get(artist_1_top_tracks_url)
artist_1_albums_url = "http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums&mbid=#{@artist_id}&api_key=0f24ee5b7c24a21c0e32d8599ba0596a&format=json"
@artist_1_albums = HTTParty.get(artist_1_albums_url)
client = Soundcloud.new(:client_id => '73b9f173ae5ddbfd481c5bc5d4c07a7e')
clean_artist_name = artist.split(' ').join('').downcase
# get a tracks oembed data
track_url = "http://soundcloud.com/#{clean_artist_name}"
@embed_info = client.get('/oembed', :url => track_url)
@embed_player_html = @embed_info["html"]
events_url = "http://ws.audioscrobbler.com/2.0/?method=artist.getevents&mbid=#{@artist_id}&api_key=0f24ee5b7c24a21c0e32d8599ba0596a&format=json"
@events = HTTParty.get(events_url)
erb :artist
end
api_key = "0f24ee5b7c24a21c0e32d8599ba0596a"
api_secret = "728d4e70e151f94923e7a7cdf3f2f04a"
#soundcloud = 73b9f173ae5ddbfd481c5bc5d4c07a7e
# lastfm = Lastfm.new(api_key, api_secret)
# token = lastfm.auth.get_token
# # open 'http://www.last.fm/api/auth/?api_key=xxxxxxxxxxx&token=xxxxxxxx' and grant the application
# lastfm.session = lastfm.auth.get_session(:token => token)['key']
<div class="artist_id_container clearfix">
<!-- BEGIN artist_id_container -->
<div class="transparent_div">
<!-- BEGIN transparent_div -->
<h2 class="artist_name"><span class="brains">Zombie</span> <%= @artist_1["artist"]["name"] %></span></h2>
<!-- END transparent_div -->
</div>
<img class="artist_pic" src="<%= @artist_1["artist"]["image"][4]["#text"] %>" />
<!-- END artist_id_container -->
</div>
<br>
<%= @embed_player_html %>
<br>
<h4>Top Albums<h4>
<table>
<tbody>
<tc>
<% i = 0 %>
<% while i < 5 %>
<td><a href="<%= @artist_1_albums["topalbums"]["album"][i]["url"] %>"><img id="album_pic" src="<%= @artist_1_albums["topalbums"]["album"][i]["image"][2]["#text"] %>"></a></td>
<% i += 1 %>
</tc>
<% end %>
</tbody>
</table>
<h4>Top 10 Zombie.FM Tracks</h4>
<ol>
<% i = 0 %>
<% while i < 10 %>
<li><a href="<%= @artist_1_top_tracks["toptracks"]["track"][i]["url"] %>"><%= @artist_1_top_tracks["toptracks"]["track"][i]["name"] %></a></li>
<% i += 1 %>
<% end %>
</ol>
<h4>Oppurtunities to get eaten by <%= @artist_1["artist"]["name"]%>:</h4>
<ul>
<% if @events["events"].count == 2 %>
<% i = 0 %>
<% while i < 10 && @events["events"]["event"][i]!= nil %>
<li><a href="<%= @events["events"]["event"][i]["url"]%>"><%= @events["events"]["event"][i]["venue"]["location"]["city"]%> - <%= @events["events"]["event"][i]["venue"]["name"] %></a></li>
<% i += 1 %>
<% end %>
<% end %>
</ul>
<a href= '/'>Back to Search</a>
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="styles.css">
<link rel="stylesheet" href="normalize.css">
<link href='http://fonts.googleapis.com/css?family=Akronim' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Frijole' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Amatic+SC:400,700' rel='stylesheet' type='text/css'>
<meta charset="UTF-8">
<title>MusicBrainzzz</title>
</head>
<body>
<%= yield %>
</body>
</html>
/*! normalize.css v2.1.3 | MIT License | git.io/normalize */
/* ==========================================================================
HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined in IE 8/9.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
/**
* Correct `inline-block` display not defined in IE 8/9.
*/
audio,
canvas,
video {
display: inline-block;
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9.
* Hide the `template` element in IE, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* ==========================================================================
Base
========================================================================== */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* ==========================================================================
Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background: transparent;
}
/**
* Address `outline` inconsistency between Chrome and other browsers.
*/
a:focus {
outline: thin dotted;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* ==========================================================================
Typography
========================================================================== */
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari 5, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9, Safari 5, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari 5 and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Correct font family set oddly in Safari 5 and Chrome.
*/
code,
kbd,
pre,
samp {
font-family: monospace, serif;
font-size: 1em;
}
/**
* Improve readability of pre-formatted text in all browsers.
*/
pre {
white-space: pre-wrap;
}
/**
* Set consistent quote types.
*/
q {
quotes: "\201C" "\201D" "\2018" "\2019";
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* ==========================================================================
Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9.
*/
img {
border: 0;
}
/**
* Correct overflow displayed oddly in IE 9.
*/
svg:not(:root) {
overflow: hidden;
}
/* ==========================================================================
Figures
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari 5.
*/
figure {
margin: 0;
}
/* ==========================================================================
Forms
========================================================================== */
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* 1. Correct font family not being inherited in all browsers.
* 2. Correct font size not being inherited in all browsers.
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
*/
button,
input,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 2 */
margin: 0; /* 3 */
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
button,
input {
line-height: normal;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
* Correct `select` style inheritance in Firefox 4+ and Opera.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari 5 and Chrome
* on OS X.
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* 1. Remove default vertical scrollbar in IE 8/9.
* 2. Improve readability and alignment in all browsers.
*/
textarea {
overflow: auto; /* 1 */
vertical-align: top; /* 2 */
}
/* ==========================================================================
Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
#album_pic {
height: 128px;
width: 128px;
}
/*=================Tags==========================*/
a:link {
COLOR: #5DC8CD;
}
a{
text-decoration: none;
}
a:visited {
COLOR: #5DC8CD;
}
a:hover {
COLOR: #FF0000;
}
a:active {
COLOR: #5DC8CD;
}
body {
padding: 30px;
background-image: url("http://zombieapocalypseacademy.org/wp-content/uploads/2011/12/wallpaper-173930.jpg");
background-size: 100%;
color: white;
}
input {
padding: 10px;
}
input[type="submit"] {
background-color: #1C5A3F;
color: white;
}
ul {
list-style: none;
}
/*------------Soundcloud Widget-------------*/
iframe {
width: 660px;
height: 283px; /* Alt iFrame height: 252px;*/
}
.setDetails {
display: none;
}
.cookiePolicy {
display: none;
}
.sc-border-dark-top {
border: 0px;
}
/*=================Classes==================*/
.logo {
/*---------ALT FONTS------------
font-family: 'Akronim', cursive;
font-family: 'Frijole', cursive;
*/
font-family: 'Amatic SC', cursive;
font-size: 50px;
font-weight: 800;
color: #5DC8CD;
margin: 10px 0px;
/*Fades in the site logo */
/*Repeted code allows for browser compatability */
-webkit-animation: fadein 3s; /* Safari and Chrome */
-moz-animation: fadein 3s; /* Firefox */
-ms-animation: fadein 3s; /* Internet Explorer */
-o-animation: fadein 3s; /* Opera */
animation: fadein 3s;
}
.brains {
/*---------ALT FONTS------------
font-family: 'Akronim', cursive;
font-family: 'Frijole', cursive;
*/
font-family: 'Amatic SC', cursive;
font-size: 50px;
font-weight: 600;
color: red;
margin: 10px 0px;
/*Fades in the site logo */
/*Repeted code allows for browser compatability */
-webkit-animation: fadein 10s; /* Safari and Chrome */
-moz-animation: fadein 10s; /* Firefox */
-ms-animation: fadein 10s; /* Internet Explorer */
-o-animation: fadein 10s; /* Opera */
animation: fadein 10s;
}
.artist_id_container {
position: relative;
margin-bottom: 10.6px;
overflow: hidden;
}
.artist_pic {
margin-right: 21.2px;
float: left;
}
.artist_name {
font-family: 'Amatic SC', cursive;
font-size: 40px;
float: left;
position: absolute;
bottom: 0;
padding: 0px 317px 0px 10px;
margin-bottom: 0px;
z-index: 1;
background-color: rgba(0,0,0,1);
background: linear-gradient(bottom, rgba(0,0,0,1), rgba(0,0,0,.4));
background: -webkit-linear-gradient(bottom, rgba(0,0,0,1), rgba(0,0,0,.4));
background: -moz-linear-gradient(bottom, rgba(0,0,0,1), rgba(0,0,0,.4));
text-align: justify;
overflow: hidden;
}
/*Logo fade in weight. browser compatability code. */
@keyframes fadein {
from { opacity: 0; }
to { opacity: 1; }
}
/* Firefox */
@-moz-keyframes fadein {
from { opacity: 0; }
to { opacity: 1; }
}
/* Safari and Chrome */
@-webkit-keyframes fadein {
from { opacity: 0; }
to { opacity: 1; }
}
/* Internet Explorer */
@-ms-keyframes fadein {
from { opacity: 0; }
to { opacity: 1; }
}​
/* Opera */
@-o-keyframes fadein {
from { opacity: 0; }
to { opacity: 1; }
}​
/*===========Album Cover's Table================*/
.transparent_div {
position: absolute;
background-color: black;
height: 30px;
width: 100px;
z-index: .9;
opacity: 0.4;
bottom: 0;
overflow: hidden;
}
/*===========Album Cover's Table================*/
/*--Normalizes the size of each album cover.--*/
#album_pic {
height: 128px;
width: 128px;
}
/*=================Clear Fix================*/
.clearfix:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
/*=====================================BOOKMARK===============================================
Starting to build app's look and feel. Going to start with the home page, then move onto the
artist's page.
GOALS:
1. Create a pleasing, unique, clean, cool, visual style.
2. Create a pleaseing layout on the artist's page.
TO DO:
1. Make it so band name doesn't scrunch up when the screen is resized.
=============================================================================================*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment