2016-06-14 7 views
2

Ich arbeite an einem Slack-Schrägstrich-Befehl in PHP, der einen Twitter-Benutzernamen verwendet und den letzten Tweet dieser Person zurückgibt.Slack druckt Raw JSON anstelle der formatierten Nachricht

Ich kann nicht herausfinden, wie das Profilbild des Benutzers angezeigt wird, damit es so schön aussieht wie Slacks Twitter-Integration.

Das Problem, das mir scheint, ist, dass ich 'unfurl_media: true' in JSON einfügen muss, das an Slack zurückgesendet wird. Das heißt, ich kann nicht einfach echo verwenden, um die Twitter-Daten, die ich möchte, in einem assoziativen Array auszudrucken.

Ich habe versucht, die Twitter-Daten, die ich will, aus dem assoziativen Array zu holen, es in JSON wieder zu kodieren und dann das zu drucken. Aber das einzige, was das tut, ist das Drucken des JSON als einfacher Text. Ich habe einen JSON-Validator geprüft und es steht geschrieben, was auf Slack gedruckt wird, ist ein gültiger JSON, also verstehe ich nicht, warum slack ihn nicht in eine formatierte Nachricht konvertiert.

Irgendwelche Vorschläge?

Hier ist der Code. Es ist ein Frankenkode, der von einer Reihe verschiedener Orte gezogen wurde, die ich meinem Willen zu beugen versuche.

<?php 

require_once('TwitterAPIExchange.php'); 

$command = $_POST['command']; 
$text = $_POST['text']; 
$token = $_POST['token']; 

if($token != '[insert your Slack slash command token here]'){ 
$msg = ":squirrel: The token for the slash command doesn't match. We're done here until IT fixes it. Don't worry, Squirrelock is on the case."; 
die($msg); 
echo $msg; 
} 


$settings = array(
'oauth_access_token' => "[insert access token here]", 
'oauth_access_token_secret' => "[insert access token secret here]", 
'consumer_key' => "[insert consumer key here]", 
'consumer_secret' => "[insert consumer secret here]" 
); 

$url = "https://api.twitter.com/1.1/statuses/user_timeline.json"; 

$requestMethod = "GET"; 

$getfield = '?screen_name='.$text.'&count=1'; 

$twitter = new TwitterAPIExchange($settings); 

$string = json_decode($twitter->setGetfield($getfield) 
          ->buildOauth($url, $requestMethod) 
          ->performRequest(), $assoc = TRUE); 

foreach($string as $items) 
{ 
$reply = "".$items['user']['profile_image_url']." *".$items['user'] ['name']."* ".$items['user']['screen_name']. "\n ".$items['text']."\n ".$items['created_at'].""; 
} 

$data = json_encode(array(
"response_type" => "in_channel", 
"text" => $reply, 
"unfurl_media" => true, 
"unfurl_links" => true 

)); 

echo $data; 

?> 
+0

"Ich habe einen JSON-Validator überprüft und es steht geschrieben, was auf Slack gedruckt wird, ist ein gültiger JSON, also verstehe ich nicht, warum slack es nicht in eine formatierte Nachricht konvertiert." Kannst du ein Beispiel für das JSON geben, das du an Slack sendest, und was erwartest du von Slack mit diesem JSON? – smarx

+0

Hier ist ein Beispiel. Ich möchte, dass Slack diesen JSON in eine formatierte Nachricht konvertiert. Wenn du dies in [Slacks Message Builder] (https://api.slack.com/docs/formatting/builder) plopst, wird es gerendert (muss noch am Styling arbeiten, nachdem ich es gerendert habe). Aber aus irgendeinem Grund funktioniert das nicht auf Slack selbst. {"response_type": "in_channel", "text": "http: \/\/pbs.twimg.com \/profile_images \/462698461792456704 \ /IkB137SH_normal.png * Ian Paul * ianpaul \ n Cortana ist so toll, wenn es stürzt nicht ab, was nicht oft ist. \ n Di Jun 14 06:01:06 +0000 2016 "," unfurl_media ":" true "," unfurl_links ":" true "} – metaflops

+0

JSON noch einmal in einem klareren Format @smarx. '{" response_type ":" in_channel "," text ":" http: \/\/pbs.twimg.com \/profilbild_images \/462698461792456704 \ /IkB137SH_normal.png * Ian Paul * ianpaul \ n Cortana ist so großartig wenn es nicht stürzt, was nicht oft ist. \ n Di Jun 14 06:01:06 +0000 2016 "," unfurl_media ":" true "," unfurl_links ":" true "}' – metaflops

Antwort

3

Umzug meines Kommentars nach unten auf eine Antwort, da es das Problem behoben zu haben scheint:

hinzufügen header('Content-Type: application/json'); vor echo $data;. Das Problem ist, dass Slack Ihre Antwort als Text interpretiert. Es wird es nur als JSON interpretieren, wenn Content-Type korrekt ist.

Verwandte Themen