OEmbed data
Endpoint |
|
All data collected |
|
Meta data
All data collected |
Array
(
[description] => Array
(
[0] => Create short links, small URLs, tiny links, and redirect URLs with this free URL shortener and free link shortener. Bulk shortening tool and generator.
)
[viewport] => Array
(
[0] => width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no
)
)
|
Linked data
HTML content
<!DOCTYPE html>
<html>
<head>
<title>Free Bulk URL Shortener Online | No account and no software needed</title>
<meta name="description" content="Create short links, small URLs, tiny links, and redirect URLs with this free URL shortener and free link shortener. Bulk shortening tool and generator." />
<link rel="canonical" href="https://bulkurlshortener.com/?short_link_not_found" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;utf8,<?xml version='1.0' encoding='iso-8859-1'?><svg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 512.092 512.092' style='enable-background:new 0 0 512.092 512.092;' xml:space='preserve'><g><g><path fill='%23FFA714' d='M312.453,199.601c-6.066-6.102-12.792-11.511-20.053-16.128c-19.232-12.315-41.59-18.859-64.427-18.859 c-31.697-0.059-62.106,12.535-84.48,34.987L34.949,308.23c-22.336,22.379-34.89,52.7-34.91,84.318 c-0.042,65.98,53.41,119.501,119.39,119.543c31.648,0.11,62.029-12.424,84.395-34.816l89.6-89.6 c1.628-1.614,2.537-3.816,2.524-6.108c-0.027-4.713-3.87-8.511-8.583-8.484h-3.413c-18.72,0.066-37.273-3.529-54.613-10.581 c-3.195-1.315-6.867-0.573-9.301,1.877l-64.427,64.512c-20.006,20.006-52.442,20.006-72.448,0 c-20.006-20.006-20.006-52.442,0-72.448l108.971-108.885c19.99-19.965,52.373-19.965,72.363,0 c13.472,12.679,34.486,12.679,47.957,0c5.796-5.801,9.31-13.495,9.899-21.675C322.976,216.108,319.371,206.535,312.453,199.601z'/></g></g><g><g><path fill='%23FFCB2B' d='M477.061,34.993c-46.657-46.657-122.303-46.657-168.96,0l-89.515,89.429c-2.458,2.47-3.167,6.185-1.792,9.387 c1.359,3.211,4.535,5.272,8.021,5.205h3.157c18.698-0.034,37.221,3.589,54.528,10.667c3.195,1.315,6.867,0.573,9.301-1.877 l64.256-64.171c20.006-20.006,52.442-20.006,72.448,0c20.006,20.006,20.006,52.442,0,72.448l-80.043,79.957l-0.683,0.768 l-27.989,27.819c-19.99,19.965-52.373,19.965-72.363,0c-13.472-12.679-34.486-12.679-47.957,0 c-5.833,5.845-9.35,13.606-9.899,21.845c-0.624,9.775,2.981,19.348,9.899,26.283c9.877,9.919,21.433,18.008,34.133,23.893 c1.792,0.853,3.584,1.536,5.376,2.304c1.792,0.768,3.669,1.365,5.461,2.048c1.792,0.683,3.669,1.28,5.461,1.792l5.035,1.365 c3.413,0.853,6.827,1.536,10.325,2.133c4.214,0.626,8.458,1.025,12.715,1.195h5.973h0.512l5.12-0.597 c1.877-0.085,3.84-0.512,6.059-0.512h2.901l5.888-0.853l2.731-0.512l4.949-1.024h0.939c20.961-5.265,40.101-16.118,55.381-31.403 l108.629-108.629C523.718,157.296,523.718,81.65,477.061,34.993z'/></g></g></svg>">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-TMPF84S');</script>
<!-- End Google Tag Manager -->
<style>
body {
position: relative;
margin: 0;
padding: 0;
font-family: 'Poppins', sans-serif;
color: #FFFFFF;
background-color: #FF7700;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 900'%3E%3Cpolygon fill='%23cc0000' points='957 450 539 900 1396 900'/%3E%3Cpolygon fill='%23aa0000' points='957 450 872.9 900 1396 900'/%3E%3Cpolygon fill='%23d6002b' points='-60 900 398 662 816 900'/%3E%3Cpolygon fill='%23b10022' points='337 900 398 662 816 900'/%3E%3Cpolygon fill='%23d9004b' points='1203 546 1552 900 876 900'/%3E%3Cpolygon fill='%23b2003d' points='1203 546 1552 900 1162 900'/%3E%3Cpolygon fill='%23d3006c' points='641 695 886 900 367 900'/%3E%3Cpolygon fill='%23ac0057' points='587 900 641 695 886 900'/%3E%3Cpolygon fill='%23c4008c' points='1710 900 1401 632 1096 900'/%3E%3Cpolygon fill='%239e0071' points='1710 900 1401 632 1365 900'/%3E%3Cpolygon fill='%23aa00aa' points='1210 900 971 687 725 900'/%3E%3Cpolygon fill='%23880088' points='943 900 1210 900 971 687'/%3E%3C/svg%3E");
background-attachment: fixed;
background-size: cover;
}
div {
box-sizing: border-box;
}
.page_container {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
}
.header_container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 48px;
color: #5F6368;
background: #FFFFFF;
box-shadow: 0 2px 6px 2px rgba(60,64,67,.15);
z-index: 100;
}
.header_placeholder {
position: relative;
width: 100%;
height: 53px;
}
.header_container .logo_container {
margin-left: 20px;
top: 12px;
}
.logo_container {
display: inline-block;
position: relative;
width: 205px;
height: 20px;
line-height: 10px;
}
.logo_container .logo_icon {
position: absolute;
top: 0;
left: 0;
width: 20px;
height: 20px;
}
.logo_container .logo_text {
position: absolute;
top: 0px;
left: 28px;
width: 177px;
height: 20px;
line-height: 20px;
font-family: 'Poppins', sans-serif;
font-size: 20px;
font-weight: 400;
color: #757575;
white-space: nowrap;
}
.logo_icon {
display: inline-block;
position: relative;
background: url("data:image/svg+xml;utf8,<?xml version='1.0' encoding='iso-8859-1'?><svg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 512.092 512.092' style='enable-background:new 0 0 512.092 512.092;' xml:space='preserve'><g><g><path fill='%23FFA714' d='M312.453,199.601c-6.066-6.102-12.792-11.511-20.053-16.128c-19.232-12.315-41.59-18.859-64.427-18.859 c-31.697-0.059-62.106,12.535-84.48,34.987L34.949,308.23c-22.336,22.379-34.89,52.7-34.91,84.318 c-0.042,65.98,53.41,119.501,119.39,119.543c31.648,0.11,62.029-12.424,84.395-34.816l89.6-89.6 c1.628-1.614,2.537-3.816,2.524-6.108c-0.027-4.713-3.87-8.511-8.583-8.484h-3.413c-18.72,0.066-37.273-3.529-54.613-10.581 c-3.195-1.315-6.867-0.573-9.301,1.877l-64.427,64.512c-20.006,20.006-52.442,20.006-72.448,0 c-20.006-20.006-20.006-52.442,0-72.448l108.971-108.885c19.99-19.965,52.373-19.965,72.363,0 c13.472,12.679,34.486,12.679,47.957,0c5.796-5.801,9.31-13.495,9.899-21.675C322.976,216.108,319.371,206.535,312.453,199.601z'/></g></g><g><g><path fill='%23FFCB2B' d='M477.061,34.993c-46.657-46.657-122.303-46.657-168.96,0l-89.515,89.429c-2.458,2.47-3.167,6.185-1.792,9.387 c1.359,3.211,4.535,5.272,8.021,5.205h3.157c18.698-0.034,37.221,3.589,54.528,10.667c3.195,1.315,6.867,0.573,9.301-1.877 l64.256-64.171c20.006-20.006,52.442-20.006,72.448,0c20.006,20.006,20.006,52.442,0,72.448l-80.043,79.957l-0.683,0.768 l-27.989,27.819c-19.99,19.965-52.373,19.965-72.363,0c-13.472-12.679-34.486-12.679-47.957,0 c-5.833,5.845-9.35,13.606-9.899,21.845c-0.624,9.775,2.981,19.348,9.899,26.283c9.877,9.919,21.433,18.008,34.133,23.893 c1.792,0.853,3.584,1.536,5.376,2.304c1.792,0.768,3.669,1.365,5.461,2.048c1.792,0.683,3.669,1.28,5.461,1.792l5.035,1.365 c3.413,0.853,6.827,1.536,10.325,2.133c4.214,0.626,8.458,1.025,12.715,1.195h5.973h0.512l5.12-0.597 c1.877-0.085,3.84-0.512,6.059-0.512h2.901l5.888-0.853l2.731-0.512l4.949-1.024h0.939c20.961-5.265,40.101-16.118,55.381-31.403 l108.629-108.629C523.718,157.296,523.718,81.65,477.061,34.993z'/></g></g></svg>");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
h1, h2 {
display: inline-block;
margin: 0;
font-size: inherit;
font-weight: inherit;
}
.full_width {
margin-left: auto;
margin-right: auto;
width: 100%;
max-width: 1250px;
}
@media only screen and (max-width: 1330px) {
.full_width {
margin-left: auto;
margin-right: auto;
width: calc(100% - 80px);
}
}
.body_container {
position: relative;
width: 100%;
min-height: calc(100% - 53px - 135px);
text-align: center;
}
.hero_container {
position: relative;
padding: 50px 0 50px 0;
}
.hero_column_container {
display: inline-block;
position: relative;
width: 50%;
vertical-align: top;
}
.hero_column_container.left {
text-align: left;
padding-right: 20px;
}
.hero_column_container.right {
padding-left: 20px;
}
@media only screen and (max-width: 815px) {
.header_container {
text-align: center;
}
.header_container .logo_container {
margin-left: 0;
}
.body_container {
min-height: initial;
}
.hero_column_container {
width: 100%;
}
.hero_column_container.left {
padding-right: 0;
}
.hero_column_container.right {
padding-left: 0;
}
}
.hero_title {
max-width: 500px;
font-size: 60px;
margin-bottom: 60px;
}
.hero_subtittle {
font-size: 30px;
margin-bottom: 40px;
}
.input_container {
position: relative;
top: 20px;
margin-bottom: 20px;
}
.input_container textarea {
box-sizing: border-box;
padding: 20px;
width: 100%;
height: 300px;
font-family: 'Poppins', sans-serif;
color: #FFFFFF;
background-color: #F37100;
border: 0;
border-radius: 0.25em;
box-shadow: 0 0 5px rgba(0,0,0,0.1) inset;
outline: none;
}
.input_container textarea:disabled {
background: #C75D00;
color: #FF8C26;
}
.input_container textarea::-moz-selection{
background-color: #FFFFFF;
}
.input_container textarea::selection{
background-color: #FFFFFF;
}
.input_button_container {
position: absolute;
bottom: 30px;
right: 25px;
}
.input_button_container > div {
display: inline-block;
vertical-align: middle;
}
.input_button_container > div:not(:last-child) {
margin-right: 20px;
}
input[type="button"].theme_button {
position: relative;
box-sizing: border-box;
padding: 10px 20px;
color: #FFFFFF;
font-family: 'Poppins', sans-serif;
font-weight: 600;
background: #CC0000;
border: 0;
border-radius: 0.15em;
box-shadow: 0 1px 3px 1px rgba(0,0,0,0.15);
}
input[type="button"].alt_button {
color: #757575;
background: #FFFFFF;
}
input[type="button"].tiny_button {
padding: 5px 10px;
font-size: 0.8em;
}
input[type="button"].theme_button:hover {
background: #D80000;
}
input[type="button"].theme_button.alt_button:hover {
background: #EAEAEA;
}
input[type="button"].theme_button:active {
top: 1px;
background: #AA0000;
box-shadow: none;
}
input[type="button"].theme_button.alt_button:active {
background: #EAEAEA;
}
input[type="button"].theme_button:disabled {
color: #F35E5E;
background-color: #AA0000;
}
input[type="button"].theme_button.alt_button:disabled {
color: #9E9E9E;
background: #CACACA;
}
input[type="button"].theme_button:focus {
outline: none;
}
.card_container {
position: relative;
margin-bottom: 40px;
padding: 60px;
text-align: left;
border-radius: 0.25em;
color: #757575;
background: #FFFFFF;
box-shadow: 0 1px 3px 1px rgba(60,64,67,.15);
}
.card_container.top_notice {
margin-top: 40px;
padding: 30px 40px;
background: #FFD5D5;
}
.card_column_2 {
display: inline-block;
vertical-align: top;
width: calc(100% / 2 - 40px);
margin-left: calc(40px * 2 / 1);
}
.card_column_2:first-child {
margin-left: 0;
}
.card_column_2:last-child {
margin-right: 0;
}
.card_column_3 {
display: inline-block;
vertical-align: top;
width: calc(100% / 3 - 40px);
margin-left: calc(40px * 3 / 2);
}
.card_column_3:first-child {
margin-left: 0;
}
.card_column_3:last-child {
margin-right: 0;
}
.card_title {
font-size: 1.2em;
color: #424242;
margin-bottom: 20px;
}
.card_title:not(:first-child) {
margin-top: 40px;
}
.card_body {
margin-bottom: 10px;
}
#card_container_output {
background: #D6002B;
}
#output_container {
max-height: 250px;
overflow-y: auto;
}
.output_row {
position: relative;
}
.output_row:not(:first-child) {
margin-top: 20px;
}
.output_row:not(.loading):after {
position: absolute;
content: "";
left: calc(50% - 10px / 4);
top: calc(50% - 10px);
width: 0;
height: 0;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-left: 10px solid #B10022;
}
.output_column {
position: relative;
padding: 10px;
white-space: nowrap;
overflow-x: hidden;
background: #B10022;
border-radius: 0.25em;
box-shadow: 0 0 5px rgba(0,0,0,0.1) inset;
}
.output_column a {
color: #FFFFFF;
text-decoration: none;
}
.output_column:last-child a {
color: #5D0215;
}
.output_column span {
color: #5D0215;
}
.output_column_button_container {
position: absolute;
top: 8px;
right: 8px;
}
.output_column_button_container.narrow {
display: none;
}
#message_container {
padding: 20px;
color: #FFECCC;
text-align: center;
}
.output_controller_container {
width: 100%;
text-align: center;
}
.output_controller_container > div {
display: inline-block;
vertical-align: middle;
}
.output_controller_container > div:not(:first-child) {
margin-left: 20px;
}
@media only screen and (max-width: 815px) {
.input_container textarea {
white-space: pre;
}
.input_button_container {
position: absolute;
right: 0;
width: 100%;
text-align: center;
}
.card_container {
padding: 40px;
}
.card_column_2 {
width: 100%;
margin-left: 0;
margin-right: 0;
}
.card_column_2:not(:first-child) {
margin-top: 40px;
}
.card_column_3 {
width: 100%;
margin-left: 0;
margin-right: 0;
}
.card_column_3:not(:first-child) {
margin-top: 40px;
}
#output_container {
max-height: 400px;
}
.output_column:not(:first-child) {
margin-top: 20px;
}
.output_row:not(:first-child) {
margin-top: 40px;
}
.output_row:not(.loading):after {
position: absolute;
content: "";
left: calc(50% - 10px / 2);
top: calc(50% - 10px / 2);
width: 0;
height: 0;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px solid #B10022;
}
.output_column_button_container:not(.narrow) {
display: none;
}
.output_column_button_container.narrow {
display: block;
}
}
@media only screen and (max-width: 500px) {
.card_container {
padding: 30px;
}
.output_controller_container > div {
display: block;
}
.output_controller_container > div:not(:first-child) {
margin-left: 0;
margin-top: 20px;
}
}
.output_row.loading {
color: #ffffff;
font-size: 5px;
margin: 20px auto;
width: 1em;
height: 1em;
border-radius: 50%;
position: relative;
text-indent: -9999em;
-webkit-animation: load4 1.3s infinite linear;
animation: load4 1.3s infinite linear;
-webkit-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
}
@-webkit-keyframes load4 {
0%,
100% {
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
}
12.5% {
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
}
25% {
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
}
37.5% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
}
50% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
}
62.5% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
}
75% {
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
}
87.5% {
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
}
}
@keyframes load4 {
0%,
100% {
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
}
12.5% {
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
}
25% {
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
}
37.5% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
}
50% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
}
62.5% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
}
75% {
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
}
87.5% {
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
}
}
.footer_container {
position: relative;
padding-top: 20px;
height: 135px;
}
.footer_text_row_container,
.footer_link_row_container {
position: relative;
width: 100%;
text-align: center;
}
.footer_text_row_container {
font-size: 11px;
}
.footer_link_row_container {
font-size: 12px;
}
.footer_text {
display: inline-block;
vertical-align: middle;
margin: 10px 20px 0px 20px;
color: #FFFFFF;
}
.footer_link {
display: inline-block;
vertical-align: middle;
margin: 10px 10px;
}
.footer_link a {
color: #FFABAB;
text-decoration: none;
}
.footer_link a:hover {
color: #FFFFFF;
}
@media only screen and (max-width: 815px) {
.footer_container {
padding-bottom: 50px;
height: initial;
}
}
</style>
<link href="https://fonts.googleapis.com/css?family=Poppins:400,500,600&display=swap" rel="stylesheet">
</head>
<body>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TMPF84S"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div class="page_container">
<div class="header_container">
<a href="/" >
<div class="logo_container">
<div class="logo_icon"></div>
<div class="logo_text">
Bulk URL Shortener
</div>
</div>
</a>
</div>
<div class="header_placeholder"></div>
<div class="body_container">
<div class="card_container top_notice full_width">
<div class="card_title">Link Not Found</div>
<div class="card_body">The shortened URL you visited was not found. It may have expired.</div>
</div>
<div class="hero_container full_width">
<div class="hero_column_container left">
<div class="hero_title">
<h1>Always Free Bulk URL Shortener</h1>
</div>
<div class="hero_subtittle">
<h2>1,000 Redirects for every link.</h2>
<h2>Expires if not used for 90 days.</h2>
</div>
</div><div class="hero_column_container right">
<div class="input_container">
<textarea id="input_textarea" spellcheck="false"></textarea>
<div class="input_button_container">
<div id="cancel_button_container" style="display: none">
<input class="theme_button alt_button" id="cancel_button" type="button" value="Cancel" disabled />
</div><div id="clear_button_container">
<input class="theme_button alt_button" id="clear_button" type="button" value="Clear" />
</div><div>
<input class="theme_button" id="input_button" type="button" value="Shorten Links" />
</div>
</div>
</div>
</div>
</div>
<div class="card_container full_width" id="card_container_output" style="display: none;">
<div class="output_container" id="output_container"></div>
<div class="message_container" id="message_container"></div>
<div class="output_controller_container">
<div>
<input class="theme_button alt_button" id="export_csv" type="button" value="Download CSV" />
</div><div>
<input class="theme_button alt_button" id="export_copy" type="button" value="Copy All" />
</div>
</div>
</div>
<!--
<div class="card_container full_width">
<div class="card_column_3">
<div class="card_title"></div>
<div class="card_body"></div>
<div class="card_body"></div>
<div class="card_body"></div>
</div><div class="card_column_3">
<div class="card_title"></div>
<div class="card_body"></div>
</div><div class="card_column_3">
<div class="card_title"></div>
<div class="card_body"></div>
</div>
</div>
-->
</div>
<div class="footer_container full_width">
<div class="footer_text_row_container">
<div class="footer_text">Copyright © Bulk URL Shortener 2020 - 2022. All rights reserved.</div>
</div>
<div class="footer_link_row_container">
<div class="footer_link"><a href="/privacy" target="_blank">Privacy Policy</a></div>
<div class="footer_link"><a href="/report" target="_blank">Report Abuse</a></div>
</div>
</div>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>
<script>
var el_input_textarea = document.getElementById("input_textarea");
var $el_input_textarea = $(el_input_textarea);
var el_input_button = document.getElementById("input_button");
var $el_input_button = $(el_input_button);
var el_cancel_button = document.getElementById("cancel_button");
var $el_cancel_button = $(el_cancel_button);
var el_cancel_button_container = document.getElementById("cancel_button_container");
var $el_cancel_button_container = $(el_cancel_button_container);
var el_clear_button = document.getElementById("clear_button");
var $el_clear_button = $(el_clear_button);
var el_clear_button_container = document.getElementById("clear_button_container");
var $el_clear_button_container = $(el_clear_button_container);
var el_card_container_output = document.getElementById("card_container_output");
var $el_card_container_output = $(el_card_container_output);
var el_output_container = document.getElementById("output_container");
var $el_output_container = $(el_output_container);
var el_message_container = document.getElementById("message_container");
var $el_message_container = $(el_message_container);
var cache_store = (function(){
var _storage = {};
var _store = function(k, v) {
if (typeof k == "undefined") {
return Object.keys(_storage);
}
if (typeof v == "undefined") {
return _storage[k.trim()];
}
_storage[k.trim()] = v;
return v;
};
return {
store: function(k, v) {
return _store(k, v);
},
exists: function(str) {
return _storage.hasOwnProperty(str.trim());
}
};
})();
var shortener = (function(cache) {
var _cache = cache;
var _started = false;
var _urls;
var _count_total;
var _count_success;
var _count_error;
var _server_errors;
var _server_error_threshold = 10;
var _server_error_retry_wait_milliseconds = 10000;
var _aborting;
var _split_rows = function(str) {
var arr = str.split(/\n/);
for (var ii = arr.length - 1; ii >= 0; ii--) {
if (!arr[ii].trim()) {
arr.splice(ii, 1);
}
}
return arr;
};
var _listeners = {
"start": [],
"stop": [],
"empty": [],
"error": [],
"done": [],
"abort": [],
"url_success": [],
"url_error": []
};
var _add_listener = function(type, fn) {
if (!_listeners.hasOwnProperty(type)) {
return;
}
_listeners[type].push(fn);
};
var _call_listeners = function(type, args) {
if (!_listeners.hasOwnProperty(type)) {
return;
}
args = args ? args : [];
for (var fn of _listeners[type]) {
fn.apply(fn, args);
}
};
var _server_error_retry = function(url) {
if (_server_errors < _server_error_threshold) {
console.log("Waiting to try again.")
_server_errors++;
setTimeout(function(){
_next(url);
}, _server_error_retry_wait_milliseconds);
return;
}
console.log("Giving up.");
_call_listeners("error");
_call_listeners("stop");
_started = false;
}
var _build_shorturl_from_id = function(id) {
return document.location.protocol + "//" + document.location.host + "/" + id;
};
var _next = function(url) {
if (_aborting) {
_call_listeners("abort", [_count_success, _count_error, _count_total]);
_call_listeners("stop");
_started = false;
return;
}
if (_urls.length == 0) {
_call_listeners("done", [_count_success, _count_error, _count_total]);
_call_listeners("stop");
_started = false;
return;
}
var url = url ? url : _urls.shift();
if (_cache.exists(url)) {
_count_success++;
_call_listeners("url_success", [url, _build_shorturl_from_id(_cache.store(url)), _count_success, _count_error, _count_total]);
_next();
return;
}
$.ajax({
url: "/api/create",
method: "POST",
type: "json",
data: {u:url},
success: function(data, textStatus, jqXHR) {
if (!data) {
console.error("Could not parse server response.");
_server_error_retry(url);
return;
}
if (data.error) {
_count_error++;
_call_listeners("url_error", [url, data.error, _count_success, _count_error, _count_total]);
_next();
return;
}
if (!data.i) {
console.error("Could not find short URL ID in server response.");
_server_error_retry(url);
return;
}
_cache.store(url, data.i);
_count_success++;
_call_listeners("url_success", [url, _build_shorturl_from_id(data.i), _count_success, _count_error, _count_total]);
_next();
},
error: function(jqXHR, textStatus, errorThrown) {
console.error("Network error: ", jqXHR, textStatus, errorThrown);
_server_error_retry(url);
}
});
};
var _start = function(str) {
if (_started) {
console.log("Already started");
return false;
}
_started = true;
_urls = _split_rows(str);
_count_total = _urls.length;
if (_count_total == 0) {
_call_listeners("empty");
return false;
}
_count_success = 0;
_count_error = 0;
_call_listeners("start");
_server_errors = 0;
_aborting = false;
_next();
return true;
};
var _stop = function() {
_aborting = true;
}
return {
on: function(type, fn) {
return _add_listener(type, fn);
},
start: function(str) {
return _start(str)
},
stop: function() {
return _stop();
}
}
})(cache_store);
el_input_textarea.value = "https://www.google.com/maps/@36.0657405,-112.1191631,3a,75y,354.81h,89.28t/data=!3m8!1e1!3m6!1sAF1QipMgRxdel20UFGdbTpVLgYfr29AMkvwQGB2xQq6-!2e10!3e11!6shttps:%2F%2Flh5.googleusercontent.com%2Fp%2FAF1QipMgRxdel20UFGdbTpVLgYfr29AMkvwQGB2xQq6-%3Dw203-h100-k-no-pi0-ya297.86172-ro-0-fo100!7i8704!8i4352\n" +
"https://www.google.com/search?q=free+bulk+url+shortener+online\n" +
"https://www.example.com/?1=abcdefghijklmnopqrstuvwxyz";
if ($el_input_textarea.offset().top + $el_input_textarea.outerHeight() < $(window).innerHeight()) {
el_input_textarea.focus();
}
var input_button_default_value = el_input_button.value;
var input_button_started_value = "Shortening...";
shortener.on("start", function() {
el_input_textarea.disabled = true;
el_input_button.disabled = true;
el_input_button.value = input_button_started_value;
$el_clear_button_container.hide();
el_clear_button.disabled = true;
$el_cancel_button_container.show();
el_cancel_button.disabled = false;
$el_card_container_output.show();
$el_output_container.empty();
$el_output_container.append("<div class=\"output_row loading\" />");
$el_message_container.text("Shortening...");
});
shortener.on("url_success", function(url, short_url, count_success, count_error, count_total) {
$input_tiny_button_short_url = $("<input />")
.attr("type", "button")
.addClass("theme_button")
.addClass("alt_button")
.addClass("tiny_button")
.attr("value", "Copy Short URL")
.attr("data-copytext", short_url)
.attr("title", short_url);
$div_tiny_button_short_url = $("<div />")
.addClass("output_column_button_container")
.append($input_tiny_button_short_url);
$input_tiny_button_short_url_narrow = $("<input />")
.attr("type", "button")
.addClass("theme_button")
.addClass("alt_button")
.addClass("tiny_button")
.attr("value", "Copy")
.attr("data-copytext", short_url)
.attr("title", short_url);
$div_tiny_button_short_url_narrow = $("<div />")
.addClass("output_column_button_container narrow")
.append($input_tiny_button_short_url_narrow);
$a_short_url = $("<a />")
.text(short_url)
.attr("href", short_url)
.attr("target", "_blank")
.attr("title", short_url);
$div_short_url = $("<div />")
.addClass("card_column_2")
.addClass("output_column")
.append($a_short_url)
.append($div_tiny_button_short_url)
.append($div_tiny_button_short_url_narrow);
$input_tiny_button_url = $("<input />")
.attr("type", "button")
.addClass("theme_button")
.addClass("alt_button")
.addClass("tiny_button")
.attr("value", "Copy Original")
.attr("data-copytext", url)
.attr("title", url);
$div_tiny_button_url = $("<div />")
.addClass("output_column_button_container")
.append($input_tiny_button_url);
$input_tiny_button_url_narrow = $("<input />")
.attr("type", "button")
.addClass("theme_button")
.addClass("alt_button")
.addClass("tiny_button")
.attr("value", "Copy")
.attr("data-copytext", url)
.attr("title", url);
$div_tiny_button_url_narrow = $("<div />")
.addClass("output_column_button_container narrow")
.append($input_tiny_button_url_narrow);
$a_url = $("<a />")
.text(url)
.attr("href", url)
.attr("target", "_blank")
.attr("title", url);
$div_url = $("<div />")
.addClass("card_column_2")
.addClass("output_column")
.append($a_url)
.append($div_tiny_button_url)
.append($div_tiny_button_url_narrow);
$div_row = $("<div />")
.addClass("output_row")
.append($div_short_url)
.append($div_url);
$el_output_container.find(".loading").before($div_row);
$el_output_container.scrollTop($el_output_container[0].scrollHeight);
if (count_error) {
$el_message_container.text("Shortening... (" + count_success + " out of " + count_total + " done with " + count_error + " error" + ( count_error == 1 ? "" : "s" ) + ")");
return;
}
$el_message_container.text("Shortening... (" + count_success + " out of " + count_total + " done)");
});
shortener.on("url_error", function(url, msg, count_success, count_error, count_total) {
$input_tiny_button_short_url = $("<input />")
.attr("type", "button")
.addClass("theme_button")
.addClass("alt_button")
.addClass("tiny_button")
.attr("value", "Copy Error")
.attr("data-copytext", msg)
.attr("title", msg);
$div_tiny_button_short_url = $("<div />")
.addClass("output_column_button_container")
.append($input_tiny_button_short_url);
$input_tiny_button_short_url_narrow = $("<input />")
.attr("type", "button")
.addClass("theme_button")
.addClass("alt_button")
.addClass("tiny_button")
.attr("value", "Copy")
.attr("data-copytext", msg)
.attr("title", msg);
$div_tiny_button_short_url_narrow = $("<div />")
.addClass("output_column_button_container narrow")
.append($input_tiny_button_short_url_narrow);
$span_short_url = $("<span />")
.text(msg)
.attr("title", msg);
$div_short_url = $("<div />")
.addClass("card_column_2")
.addClass("output_column")
.append($span_short_url)
.append($div_tiny_button_short_url)
.append($div_tiny_button_short_url_narrow);
$input_tiny_button_url = $("<input />")
.attr("type", "button")
.addClass("theme_button")
.addClass("alt_button")
.addClass("tiny_button")
.attr("value", "Copy Original")
.attr("data-copytext", url)
.attr("title", url);
$div_tiny_button_url = $("<div />")
.addClass("output_column_button_container")
.append($input_tiny_button_url);
$input_tiny_button_url_narrow = $("<input />")
.attr("type", "button")
.addClass("theme_button")
.addClass("alt_button")
.addClass("tiny_button")
.attr("value", "Copy")
.attr("data-copytext", url)
.attr("title", url);
$div_tiny_button_url_narrow = $("<div />")
.addClass("output_column_button_container narrow")
.append($input_tiny_button_url_narrow);
$span_url = $("<span />")
.text(url)
.attr("title", url);
$div_url = $("<div />")
.addClass("card_column_2")
.addClass("output_column")
.append($span_url)
.append($div_tiny_button_url)
.append($div_tiny_button_url_narrow);
$div_row = $("<div />")
.addClass("output_row")
.append($div_short_url)
.append($div_url);
$el_output_container.find(".loading").before($div_row);
$el_output_container.scrollTop($el_output_container[0].scrollHeight);
if (count_error) {
$el_message_container.text("Shortening... (" + count_success + " out of " + count_total + " done with " + count_error + " error" + ( count_error == 1 ? "" : "s" ) + ")");
return;
}
$el_message_container.text("Shortening... (" + count_success + " out of " + count_total + " done)");
console.log(url, msg);
});
shortener.on("abort", function(count_success, count_error, count_total) {
if (count_error) {
$el_message_container.text("Stopped (" + count_success + " out of " + count_total + " done with " + count_error + " error" + ( count_error == 1 ? "" : "s" ) + ")");
return;
}
$el_message_container.text("Stopped (" + count_success + " out of " + count_total + " done)");
});
shortener.on("done", function(count_success, count_error, count_total) {
if (count_error) {
$el_message_container.text("Shortened " + count_success + " out of " + count_total + " link" + ( count_total == 1 ? "" : "s" ) + " with " + count_error + " error" + ( count_error == 1 ? "" : "s" ));
return;
}
$el_message_container.text("Shortened " + count_success + " link" + ( count_success == 1 ? "" : "s" ) );
});
shortener.on("stop", function() {
el_input_textarea.disabled = false;
el_input_button.disabled = false;
el_input_button.value = input_button_default_value;
$el_clear_button_container.show();
el_clear_button.disabled = false;
$el_cancel_button_container.hide();
el_cancel_button.disabled = true;
$el_output_container.find(".loading").remove();
});
var scrollOnce = false;
$el_input_button.on("click", function() {
if (shortener.start(el_input_textarea.value)) {
if (!scrollOnce) {
scrollOnce = true;
$(".page_container").animate({
scrollTop: Math.max(
$(".hero_container").outerHeight() + $(".header_placeholder").outerHeight() - 100,
$(".page_container").scrollTop()
)
}, 2000);
}
}
});
$el_clear_button.on("click", function() {
el_input_textarea.value = "";
});
$el_cancel_button.on("click", function() {
shortener.stop();
});
var buttonCopy = new ClipboardJS("input[type=\"button\"][data-copytext]", {
text: function(trigger) {
return trigger.getAttribute('data-copytext');
}
});
var copyAllStore;
var csvAllStore;
shortener.on("start", function() {
copyAllStore = [];
csvAllStore = [];
});
shortener.on("url_success", function(url, short_url, count_success, count_error, count_total) {
copyAllStore.push(short_url + "\t" + url);
csvAllStore.push("\"" + short_url.replace(/\"/, "\"\"") + "\",\"" + url.replace(/\"/, "\"\"") + "\"");
});
shortener.on("url_error", function(url, msg, count_success, count_error, count_total) {
copyAllStore.push(msg + "\t" + url);
csvAllStore.push("\"" + msg.replace(/\"/, "\"\"") + "\",\"" + url.replace(/\"/, "\"\"") + "\"");
});
var buttonCopyAll = new ClipboardJS("#export_copy", {
text: function(trigger) {
return copyAllStore.join("\n");
}
});
var makeDownload = function(val, filename, contentType) {
if (!val || !filename || !contentType)
{
return;
}
var a = window.document.createElement('a');
a.href = window.URL.createObjectURL(new Blob([val], {type: contentType}));
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
};
$("#export_csv").on("click", function(e) {
makeDownload(csvAllStore.join("\n"), "bulk-url-shortener.csv", "text/csv");
});
</script>
</body>
</html>