ST. PETERSBURG, Fla. -- Evan Longoria might be playing himself onto the All-Star team.
"There's a sense of calmness in our dugout," said Longoria, one of five players the fans will vote on to fill the last American League All-Star spot. "It's incredible the things we're doing here."
James Shields (7-5) gave up two runs and four hits over seven innings to win his third consecutive start. He struck out eight and walked one.
The Rays, with the majors' best record at 55-32, have won 11 of 12 overall. Their seven-game winning streak is the second-longest in team history; Tampa Bay won 12 in a row in June 2004.
"Right now, we're trying to put together a run and keep it going," Shields said.
Esteban German drove in both runs for the Royals, who have lost seven of nine.
Carlos Pena drove in two runs on a two-out double and Longoria followed with his two-run homer off Luke Hochevar (5-7) that gave Tampa Bay a 5-2 lead in the third. Longoria has five homers and 17 RBI in his last 13 games.
"Right now he's playing with a lot of confidence," Rays manager Joe Maddon said. "It's really not a surprise. This is what he's capable of doing. As the league learns him, and then he learns the league back, there's going to be some give and take going on. But I think you're going to see this kind of performance for many years to come."
Longoria's 16 homers this season are tied with Kansas City's Bob Hamelin (1994) for the second-most by an AL rookie before the All-Star break in the last 20 years.
"Just to be included in that list is awesome," Longoria said of possibly making the All-Star team. "I really didn't think coming down the stretch that I was going to get any kind of voting or any kind of mention. It was a good overall day for me."
Tampa Bay went ahead 7-2 on B.J. Upton's two-run double in the fourth. Gabe Gross added a solo homer and Carl Crawford a sacrifice hit to make it 9-2 in the sixth.
"They're hot. They're confident. You can't make that many mistakes," Kansas City manager Trey Hillman said.
German put the Royals up 2-0 with a two-out, two-run single in the second.
Tampa Bay loaded the bases with no out in the bottom half but scored just once on an RBI grounder by Ben Zobrist. Hochevar then induced an inning-ending double-play grounder from Gross.
Hochevar allowed seven runs and nine hits in four innings. He has given up 13 runs over 10 innings in his last two starts.
"I feel like I just didn't do a good job moving the ball around," Hochevar said. "I've got to do a better job of pitching. Change speeds, move the ball in and out."
The Rays are 36-13 at home this season. They have won 11 of the past 12 series at Tropicana Field. ... Maddon said closer Troy Percival (left hamstring) may not be ready to return immediately after the All-Star break. ... Royals 3B Alex Gordon was rested. LF David DeJesus, normally the leadoff hitter, moved into Gordon's third spot in the lineup. It's the fourth time DeJesus hit third this season. ... Rays CF Rocco Baldelli, who hurt his groin while on a rehab assignment for chronic muscle fatigue, is not ready to resume playing in minor league games. He's working out with the team. ... Tampa Bay LHP Scott Kazmir and C Dioner Navarro made the All-Star team. Kansas City closer Joakim Soria also was chosen for the squad, and outfielder Jose Guillen is a candidate for the final fan selection. "This is the best thing in my life, next to getting married," Soria said.