Australia's Leading Digital Marketing Experts. T. 1300 235 433  |  Aggregation Enquires Welcome

Add Stock Quote Date Table to WordPress With Shortcode (Alpha Vantage API)

In early October we provided a shortcode that would query Alpha Vantage for stock data. One of the comments asked about how one would include the data in tables rather than a graph. This is a very crude example (I spend no more than a couple of minutes modifying it). If you're going to use it you'll want to style it and copy the inline CSS to the appropriate location.

■ ■ ■

Shortcode of [stocktable number="10"] returns the following. It's kind-of mobile responsive... so if you were to use it you would certainly need to make improvements. We're caching the data for three hours.

8th October 12:00
C: 15.1200
O: 14.9200
H: 15.4900
L: 14.8500
V: 99468887
11th October 12:00
C: 15.0900
O: 15.2000
H: 15.3600
L: 14.9700
V: 45302310
12th October 12:00
C: 15.6400
O: 15.1100
H: 15.6800
L: 15.0100
V: 89134009
13th October 12:00
C: 15.5100
O: 15.5900
H: 15.6900
L: 15.2700
V: 63363486
14th October 12:00
C: 15.4500
O: 15.6200
H: 15.6200
L: 15.3700
V: 50875110
15th October 12:00
C: 15.7000
O: 15.5400
H: 16.0300
L: 15.5350
V: 77211817
18th October 12:00
C: 15.5600
O: 15.5700
H: 15.6500
L: 15.4850
V: 48643809
19th October 12:00
C: 15.4200
O: 15.6000
H: 15.6900
L: 15.3700
V: 44668310
20th October 12:00
C: 16.0400
O: 15.4300
H: 16.1600
L: 15.3700
V: 105213717
21st October 12:00
C: 16.5500
O: 16.1600
H: 16.7000
L: 16.1300
V: 95854951

Original post published here.

WordPress Shortcode

Copy and paste the WordPress function into your theme's functions.php file or, if you sensibly have one installed, your custom functions plugin.

1
<?php 
2
/*
3
 Add Stock Quote Graphs to WordPress With Shortcode
4
 http://www.beliefmedia.com/stock-quote-graph-wordpress
5
 Response to question on website
6
*/
7
 
8
9
 
10
  $atts = shortcode_atts(array(
11
    'symbol' => 'F',
12
    'time' => '2',
13
    'number' => '90',
14
    'size' => 'compac', /* compac or full */
15
    'interval' => '60', /* 1min, 5min, 15min, 30min, 60min */
16
    'apikey' => 'xxxxxxxxxxxxxxxx',
17
    'cache' => 3600
18
  ), $atts);
19
 
20
 $transient = 'bmaast_' . md5(serialize($atts));
21
 $cachedposts = get_transient($transient);
22
 
23
 if ($cachedposts !== false) {
24
  return $cachedposts;
25
 
26
 } else {
27
 
28
    switch ($atts['time']) {
29
        case 1:
30
            $series = 'TIME_SERIES_INTRADAY';
31
            $series_name = 'Time Series (' . $atts['interval'] . 'min)';
32
            break;
33
        case 2:
34
            $series = 'TIME_SERIES_DAILY';
35
            $series_name = 'Time Series (Daily)';
36
            break;
37
        case 3:
38
            $series = 'TIME_SERIES_DAILY_ADJUSTED';
39
            $series_name = 'Time Series (Daily)';
40
            break;
41
        case 4:
42
            $series = 'TIME_SERIES_WEEKLY';
43
            $series_name = 'Weekly Time Series';
44
            break;
45
        case 5:
46
            $series = 'TIME_SERIES_MONTHLY';
47
            $series_name = 'Monthly Time Series';
48
            break;
49
        default:
50
            $series = 'Time Series (Daily)';
51
            break;
52
    }
53
 
54
    $return = '
55
<style>
56
    * {
57
        -moz-box-sizing: border-box;
58
        -webkit-box-sizing: border-box;
59
        box-sizing: border-box;
60
    }
61
 
62
    .bmquotes {
63
        clear: both;
64
        padding: 0px;
65
        margin: 0px;
66
    }
67
 
68
    .col {
69
        display: block;
70
 float:left;
71
 margin: 5px 0 1% 1.6%;
72
    }
73
 
74
    .col:first-child {
75
        margin-left: 0;
76
    }
77
 
78
    .group:before,
79
    .group:after {
80
        content:""; display:table;
81
    }
82
 
83
    .group:after {
84
        clear:both;
85
    }
86
 
87
    .group {
88
        zoom:1;
89
    }
90
 
91
    .quote-container {
92
        width: 100%;
93
        display: block;
94
        margin: 0 auto;
95
    }
96
 
97
    .quote {
98
        width: 18.7%;
99
         padding: 5px;
100
    }
101
 
102
    .first {
103
        width: 18.7%;
104
        padding: 5px;
105
    }
106
 
107
    .title {
108
        width: 100%;
109
        padding: 5px;
110
    }
111
 
112
    @media only screen and (max-width: 480px) {
113
        .col {
114
            width: 100%;
115
            margin: 1% 0 1% 0%;
116
        }
117
 
118
        .quote {
119
            width: 100%;
120
        }
121
 
122
        .title {
123
            width: 100%;
124
            background-color: #C4C9C2;
125
            font-decoration: bold;
126
        }
127
 
128
    }
129
    </style>
130
 
131
';
132
 
133
    /* Get Stock data */
134
    $data = @file_get_contents('https://www.alphavantage.co/query?function=' . $series . '&symbol=' . strtoupper($atts['symbol']) . '&interval=' . $atts['interval'] . 'min&apikey=' . $atts['apikey'] . '&interval=' . $atts['interval'] . 'min&outputsize=' . $atts['size']);
135
    if ($data === false) return 'Data currently unavailable.';
136
    $data = json_decode($data, true);
137
    $data = $data[$series_name];
138
    if (empty($data)) return 'Data currently unavailable.';
139
 
140
    /* Return portion of results & reverse */
141
    if ($atts['number'] != '') $data = array_slice($data, 0, $atts['number'], true);
142
    $data = array_reverse($data, true);
143
 
144
    /* Bulid table */
145
    foreach ($data AS $key => $value) {
146
 
147
       /* Use strtotime with $key (perhaps in the row) */
148
       $return .= '<div class="title">' . date('jS F g:s', strtotime($key)) . '</div>';
149
 
150
       $return .= '<div class="bmquotes group">
151
<div class="col first">C: ' . $value['4. close'] . '</div>
152
<div class="col quote">O: ' . $value['1. open'] . '</div>
153
<div class="col quote">H: ' . $value['2. high'] . '</div>
154
<div class="col quote">L: ' . $value['3. low'] . '</div>
155
<div class="col quote">V: ' . $value['5. volume'] . '</div>
156
</p></div>';
157
 
158
    }
159
 
160
   /* Set transient chart data */
161
   set_transient($transient, $return, $atts['cache']);
162
   return $return;
163
 }
164
}
165
add_shortcode('stocktable', 'beliefmedia_alpha_vantage_quotes');

If you require shortcode to work in a sidebar widget, you'll have to enable the functionality with a filter. If you're using our custom functions plugin, you'll have that feature enabled by default.

Like this article?

Share on facebook
Share on Facebook
Share on twitter
Share on Twitter
Share on linkedin
Share on Linkdin
Share on pinterest
Share on Pinterest

Leave a comment