WeChat Material ManagementとMass PostingはJavaフレンドリーではありません。この記事では、新しい一時的な材料と新しい恒久的な材料を紹介し、それらを取得、削除、および変更することにより、残りを追加します。
多くの場合、公式アカウントに一時的なマルチメディア資料が必要なシナリオがあります。たとえば、特にメッセージを送信する場合、インターフェイスを使用する場合、マルチメディアファイルの取得や呼び出しなどの操作、マルチメディアメッセージはMedia_IDを介して実行されます。マテリアル管理インターフェイスは、すべての認定サブスクリプション番号とサービス番号に開放されています。
物質的な制限
画像:2m、PNG/JPEG/JPG/GIF形式の音声をサポート:2M、再生長は60Sを超えず、AMR/MP3形式ビデオ(ビデオ):10MB、MP4形式のサムネイル:64kb、JPG形式をサポートします。
1.一時的な資料を追加します
インターフェイス:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=access_token&type=type、そしてメディアファイルタイプを渡します。
1.サブスクリプションおよびサービスアカウントは認定する必要があります
2。一時的な材料Media_idは再利用可能です
3.メディアファイルはWeChatの背景に3日間保存されます。つまり、Media_IDは3日後に無効になります。
/ ** *一時的な素材をアップロード(ローカル) * * @param AccessToken * @param Type *メディアファイルタイプ、画像(画像)、音声(音声)、ビデオ(ビデオ)、サムネイル(サム) * @param Path * @return */ public static uploadmediasresult uploadtempmediafile(String Accesstoken、String uploadmedias nul; treemap <string、string> params = new Treemap <>(); params.put( "Access_Token"、AccessToken); params.put( "type"、type); try {string json = httpsuploadmediafile(systemconfig.post_method、wechatconfig.upload_temp_media_type_url、params、path); result = jsonutil.fromjsonstring(json、uploadmediasresult.class); } catch(Exception e){e.printstacktrace(); } return result; } / ** *一時的な素材をアップロード(ネットワーク) * * @param AccessToken * @param Type *画像(画像)、音声(音声)、ビデオ(ビデオ)、サムネイル(サム) * @param Path * @return * / public static upload mediasresresresresult uploadtempmedia(cassitokentoken、rintoken、ring uploadmedias; treemap <string、string> params = new Treemap <>(); params.put( "Access_Token"、AccessToken); params.put( "type"、type); try {string json = httpsuploadmedia(systemconfig.post_method、wechatconfig.upload_temp_media_type_url、params、path、0、0); result = jsonutil.fromjsonstring(json、uploadmediasresult.class); } catch(Exception e){e.printstacktrace(); } return result; }2.永久材料を追加します
インターフェイス:https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=acses_token&token&token&token&token&type=type、画像(画像)、音声(音声)、ビデオ(ビデオ、例外)、サムネイル(サム)を含むメディアファイルタイプ
/ ** *恒久的な素材をアップロード(ローカル) * * @param AccessToken * @param Type *画像(画像)、音声(音声)、ビデオ(ビデオ)、サムネイル(サム) * @return */ public static uploadmediasResult upload foreforevermediafile(String AccessToken、String Path){uploadmediasRediasulter null; treemap <string、string> params = new Treemap <>(); params.put( "Access_Token"、AccessToken); params.put( "type"、type); try {string json = httpsuploadmediafile(systemconfig.post_method、wechatconfig.upload_forever_media_type_url、params、path); result = jsonutil.fromjsonstring(json、uploadmediasresult.class); } catch(Exception e){e.printstacktrace(); } return result; } / ** *恒久的な素材をアップロード(ネットワーク) * * @param AccessToken * @param Type *画像(画像)、音声(音声)、ビデオ(ビデオ)、サムネイル(サム) * @return * / public static upload upload forevermedia(String AccessToken、String Path){uploadmediasRediasulterult upload foreforevermedia( treemap <string、string> params = new Treemap <>(); params.put( "Access_Token"、AccessToken); params.put( "type"、type); try {string json = httpsuploadmedia(systemconfig.post_method、wechatconfig.upload_forever_media_type_url、params、path、0、0); result = jsonutil.fromjsonstring(json、uploadmediasresult.class); } catch(Exception e){e.printstacktrace(); } return result; }恒久的なビデオ資料を追加することに特に注意する必要があります。ビデオ資料をアップロードするときは、素材のタイトルと紹介の説明情報を含むID説明を含む別のフォームを投稿する必要があり、コンテンツ形式はJSONです。
/ ** *永久素材(ビデオ) * * @param AccessToken * @return */ public Static String upload ForeverMediaFile(String AccessToken、String Title、String Introduction、String Path){treemap <string、string> params = new Treemap <>(); params.put( "Access_Token"、AccessToken); params.put( "type"、 "video"); string mediaid = null; try {string json = httpsuploadvideomediafile(systemconfig.post_method、wechatconfig.upload_forever_media_type_url、params、path、title、introdution); MediaId = jsonutil.fromjsonstring(json、 "media_id"); } catch(Exception e){e.printstacktrace(); } return mediaid; } / ** *永続的な素材(ビデオ、ネットワーク) * * @param accesstoken * @return * / public static string upload forevermedia(string accesstoken、string title、string introwing、string path){treemap <string、string> params = new Treemap <>(); params.put( "Access_Token"、AccessToken); params.put( "type"、 "video"); string mediaid = null; try {string json = httpsuploadvideomedia(systemconfig.post_method、wechatconfig.upload_forever_media_type_url、params、path、title、introdution、0、0); MediaId = jsonutil.fromjsonstring(json、 "media_id"); } catch(Exception e){e.printstacktrace(); } return mediaid; }3.永続的なグラフィック素材を追加します
インターフェイス:https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=access_token、投稿情報についてはuploadnewsmediaエンティティクラスを参照してください。
一般的に使用される材料の場合、開発者はこのインターフェイスを介してそれらをWeChatサーバーにアップロードし、永久に使用できます。
1。永続的な画像素材が追加された後、URLを使用して開発者に返されます。開発者は、Tencentドメイン名内でそれを使用できます(Tencentドメイン名の外で使用すると、写真がブロックされます)。
2。公式アカウントの保存された材料の総数は、グラフィックおよびテキストメッセージの資料と画像資料の上限は5,000、その他のタイプは1,000に制限されています。
3.グラフィックメッセージとテキストメッセージの特定のコンテンツでは、WeChatバックエンドは外部画像リンクをフィルタリングし、画像URLを「グラフィックメッセージとテキストメッセージの画像をアップロードしてURL」インターフェイスを介してアップロードする必要があります。
4.「URLSを取得するためにテキストメッセージに写真をアップロードする」にアップロードされた写真は、公式アカウントのマテリアルライブラリに5,000枚の写真の限界を占めていません。写真はJPG/PNG形式のみをサポートしており、サイズは1MB未満でなければなりません。
5.グラフィックメッセージとテキストメッセージは、独自のアカウントやその他のパブリックアカウントをメインテキストに挿入する機能をサポートし、記事へのリンクを投稿しました。
/ ** *恒久的なグラフィックメッセージとテキストメッセージをアップロードするための資料 * * @param AccessToken *認定token * @param Entity *画像およびテキストメッセージオブジェクト * @return */ public static upload mediasResult uploadNewsMedia(String AccessToken、List <UploadNewsMedia> Entity){uploadmediasult = null; treemap <string、string> params = new Treemap <>(); params.put( "Access_Token"、AccessToken); //送信パラメーターを投稿treemap <string、list <uploadnewsmedia >> dataparams = new treemap <string、list <uploadnewsmedia >>(); dataparams.put( "記事"、エンティティ);文字列data = jsonutil.tojsonstring(dataparams); string json = httprequtil.httpsddefaultexecute(systemconfig.post_method、wechatconfig.upload_forever_news_media_url、params、data); result = jsonutil.fromjsonstring(json、uploadmediasresult.class);返品結果; }4。テキストメッセージに写真をアップロードして、URLを取得します
インターフェイス:https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=access_token
このインターフェイスにアップロードされた写真は、公式アカウントのマテリアルライブラリの5,000枚の写真の限界を占めていません。画像はJPG/PNG形式のみをサポートし、サイズは1MB未満でなければなりません。このインターフェイスによって返されるURLは、テキストメッセージに配置できる画像をアップロードするためのURLです。
/ ** *テキストメッセージに画像をアップロードしてURL(ローカル) * * @Param AccessToken * @Param Path * @return */ public Static String UploadImgMediaFile(String AccessToken、String Path){Treemap <String、String> params = new Treemap <>(); params.put( "Access_Token"、AccessToken);文字列url = null; try {string json = httpsuploadmediafile(systemconfig.post_method、wechatconfig.upload_img_media_url、params、path); url = jsonutil.fromjsonstring(json、 "url"); } catch(Exception e){e.printstacktrace(); } return url; } / ** *テキストメッセージに画像をアップロードしてURL(ネットワーク) * * @param path * @return * / public static string uploadimgmedia(string accesstoken、string path){treemap <string、string> params = new treemap <string、string>(); params.put( "Access_Token"、AccessToken);文字列url = null; try {string json = httpsuploadmedia(systemconfig.post_method、wechatconfig.upload_img_media_url、params、path、0、0); url = jsonutil.fromjsonstring(json、 "url"); } catch(Exception e){e.printstacktrace(); } return url; }V.いくつかのツール
構成クラス
public static final string upload_img_media_url = "https://api.weixin.qc.com/cgi-bin/media/uploadimg"; public static final string upload_forever_news_media_url = "https://api.weixin.qc.com/cgi-bin/material/add_news"; public static final string upload_temp_media_type_url = "https://api.weixin.qq.com/cgi-bin/media/upload"; public static final string upload_forever_media_type_url = "https://api.weixin.qc.com/cgi-bin/material/add_material";
グラフィックとテキストメッセージの素材リターンクラスをアップロードします
パッケージcom.phil.wechat.msg.model.media; / ***グラフィックとテキストメッセージの資料のアップロードで返された結果* @Author Phil* @date 2017年9月20日**/ public class uploadmediasResult {private string type; //画像(画像)、音声(音声)、ビデオ(ビデオ)、サムネイル(サム)を含むメディアファイルタイプ、回数はニュースです。 //メディアファイル/グラフィックおよびテキストメッセージのアップロード後に取得された一意の識別子private string recuted_at; //メディアファイルアップロード時間}グラフィックとテキストメッセージの素材エンティティクラスをアップロードします
パッケージcom.phil.wechat.msg.model.media; java.io.serializableをインポートします。 / ***グラフィックメッセージマテリアルエンティティクラス* @author phil* @date 2017年9月20日*/ public class uploadnewsmediaは、Serializable {private static final long serialversionuid = 6551817058101753854l;プライベートストリングsumb_media_id; //グラフィックメッセージのサムネイルのmedia_idは、基本的なサポート-uploadマルチメディアファイルインターフェイスでプライベート文字列著者を取得できます。 //グラフィックメッセージプライベート文字列タイトルの著者。 //グラフィックメッセージプライベート文字列content_source_urlのタイトル; //リンクをクリックして、元のテキストプライベート文字列コンテンツを読み取ります。 //グラフィックメッセージページのコンテンツは、HTMLタグプライベートストリングダイジェストをサポートしています。 //グラフィックメッセージの説明private int show_conver_pic; //カバー1として表示されるかどうかは、カバー0がカバーとして表示されないように表示されることを意味します}アップロード方法
/**アップロードメディアファイル(ローカル) * * @paramメソッド *メソッドのリクエストget/post * @param path * api path * @param param * api parameter * @param mediapath * @param mediapath * @return * @throws * @throws */public static string httpsuploadmediafile(string string path、string path、string path、string httpsuploadmediafath)ヌル; url url = new url(setParmas(param、path、 "")); outputStream output = null; datainputStream inputstream = null; try {file file = new file(mediapath); if(!file.isfile()||!file.exists()){throw new ioException( "file is not inted"); } httpurlconnection con =(httpurlconnection)url.openconnection(); con.setdoinput(true); con.setDoOutput(true); con.setusecaches(false); con.setRequestMethod(SystemConfig.Post_Method); //リクエストヘッダー情報con.setRequestProperty( "Connection"、 "Keep-Alive"); con.setRequestProperty( "charset"、systemconfig.default_character_encoding); //境界文字列境界= "----------" + system.currenttimemillis()を設定します。 con.setRequestProperty( "content-type"、 "multipart/form-data; boundary =" + boundary); //テキスト情報を要求する//パート1出力= new DataOutputStream(con.getOutputStream()); ioutils.write(( " - " + boundary + "/r/n").getBytes(SystemConfig.Default_Character_Encoding)、output); ioutils.write(( "content-disposition:form-data; name =/" media/"; filename =/" " + file.getName() +"/"/r/n").getBytes(systemConfig.default_character_encoding)、output); ioutils.write( "content-type:application/octet-stream/r/n/r/n" .getBytes(systemconfig.default_character_encoding)、output); // ioutils.write(( "content-type:" + fileext + "/r/n/n/n")。getBytes()、output); //ファイルボディパーツ//ファイルをストリーミングしてファイルをURLに押し込みますinputstream = new DatainputStream(new FileInputStream(file)); ioutils.copy(inputstream、output); //パートioutils.write(( "/r/n - " + boundary + " - /r/n")。getBytes(SystemConfig.Default_Character_Encoding)、出力); output.flush(); result = inputStreamToString(con.getInputStream()); } catch(malformedurlexception e){e.printstacktrace(); } catch(protocolexception e){e.printstacktrace(); } catch(ioException e){new IoException( "Data Error"を読む "); }最後に{ioutils.closequetly(output); ioutils.closequetly(inputstream); } return result; }/** *メディアファイルをアップロード(ローカルにすることはできません) * * @paramメソッド * requestメソッドget/post * @param path * api path * @param param * api parameter * @param mediapath * @param mediapath * @param connime * @param conntime *接続時間は5000にデフォルトです * @param readtime httpsuploadmedia(string method、string path、map <string、string> param、string mediapath、int connime、int readtime)throws exception {string result = ""; url url = new url(setParmas(param、path、 "")); outputStream output = null; BufferedInputStream inputstream = null; try {string boundary = "----"; httpurlconnection conn = getConnection(method、url); conn.setConnectTimeout(conntime == 0?default_conntime:conntime); conn.setReadTimeout(ReadTime == 0?default_upload_readtime:readtime); conn.setRequestProperty( "content-type"、 "multipart/form-data; boundary =" + boundary); output = conn.getOutputStream(); url mediaurl = new url(mediapath); if(mediaurl!= null){httpurlconnection mediaconn =(httpurlconnection)mediaurl.openconnection(); Mediaconn.setDoOutput(true); mediaconn.setusecaches(false); mediaconn.setRequestMethod(SystemConfig.get_method); mediaconn.setConnectTimeout(conntime == 0?default_conntime:conntime); mediaconn.setreadTimeout(readtime == 0?default_upload_readtime:readtime); string conntype = mediaconn.getContentType(); //ファイル拡張文字列fileext = getFileExt(conntype); ioutils.write(( " - " + boundary + "/r/n")。getBytes()、output); ioutils.write(( "content-disposition:form-data; name =/" media/"; filename =/" " + getFileName(mediapath) +"/"/r/n")。getBytes()、output); ioutils.write(( "content-type:" + fileext + "/r/n/r/n")。getBytes()、output); inputStream = new BufferedInputStream(MediaTonn.getInputStream()); ioutils.copy(inputstream、output); ioutils.write(( "/r/n ----" + boundary + " - /r/n")。getBytes()、output); mediaconn.disconnect(); //入力ストリームを取得しますresult = inputstreamtostring(conn.getInputStream()); }} catch(malformedurlexception e){e.printstacktrace(); } catch(protocolexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }最後に{ioutils.closequetly(output); ioutils.closequetly(inputstream); } return result; }/** *ビデオメディアファイル(ローカル) * * @param Method * request Method get/post * @param path * api path * @param param * api parameter * @param mediapath *アップロードするボイドのパスmap <string、string> param、string mediapath、string title、string indution)throws exception {string result = null; url url = new url(setParmas(param、path、 "")); outputStream output = null; datainputStream inputstream = null; try {file file = new file(mediapath); if(!file.isfile()||!file.exists()){throw new ioException( "file is not inted"); } httpurlconnection con =(httpurlconnection)url.openconnection(); con.setdoinput(true); con.setDoOutput(true); con.setusecaches(false); con.setRequestMethod(SystemConfig.Post_Method); //リクエストヘッダー情報con.setRequestProperty( "Connection"、 "Keep-Alive"); con.setRequestProperty( "charset"、systemconfig.default_character_encoding); //境界文字列境界= "----------" + system.currenttimemillis()を設定します。 con.setRequestProperty( "content-type"、 "multipart/form-data; boundary =" + boundary); //ボディ情報を要求する//パート1出力= new DataOutputStream(con.getOutputStream()); ioutils.write(( " - " + boundary + "/r/n").getBytes(SystemConfig.Default_Character_Encoding)、output); ioutils.write(( "content-disposition:form-data; name =/" media/"; filename =/" " + file.getName() +"/"/r/n").getBytes()、output); ioutils.write( "content-type:video/mp4/r/n/r/n" .getBytes()、output); //ファイルボディパーツ//ファイルをストリーミングしてファイルをURLに押し込みますinputstream = new DatainputStream(new FileInputStream(file)); ioutils.copy(inputstream、output); //パートioutils.write(( " - " + boundary + "/r/n").getbytes(systemconfig.default_character_encoding)、output); ioutils.write( "content-disposition:form-data; name =/" description/";/r/n/r/n" .getBytes(SystemConfig.Default_Character_Encoding)、output); ioutils.write(( "{/" title/":/" " + title +"/"、/" Introduction/":/" " + introduction +"/"}").getBytes(systemconfig.default_character_encoding)、output); ioutils.write(( "/r/n - " + boundary + " - /r/n/r/n") output.flush(); result = inputStreamToString(con.getInputStream()); } catch(malformedurlexception e){e.printstacktrace(); } catch(protocolexception e){e.printstacktrace(); } catch(ioException e){new IoException( "Data Error"を読む "); }最後に{ioutils.closequetly(output); ioutils.closequetly(inputstream); } return result; } /** *ビデオメディアファイル(ネットワーク) * * * @paramメソッド *リクエストメソッド * get /post * @param path * api path * @param param * api parameter * @param mediapath *アップロード * @paramタイトル *ビデオタイトル *ビデオタイトル * @param introdution * @param conntime * @param conntime * @param conntims例外 */ public static string httpsuploadvideomedia(string method、string path、map <string、string> param、string mediapath、string title、string introdution、int conntime、int readtime)slows {string result = null; url url = new url(setParmas(param、path、 "")); outputStream output = null; BufferedInputStream inputstream = null; try {string boundary = "----"; httpurlconnection conn = getConnection(method、url); conn.setConnectTimeout(conntime == 0?default_conntime:conntime); conn.setReadTimeout(ReadTime == 0?default_upload_readtime:readtime); conn.setRequestProperty( "content-type"、 "multipart/form-data; boundary =" + boundary); output = conn.getOutputStream(); url mediaurl = new url(mediapath); if(mediaurl!= null){httpurlconnection mediaconn =(httpurlconnection)mediaurl.openconnection(); Mediaconn.setDoOutput(true); mediaconn.setusecaches(false); mediaconn.setRequestMethod(SystemConfig.get_method); mediaconn.setConnectTimeout(conntime == 0?default_conntime:conntime); mediaconn.setreadTimeout(readtime == 0?default_upload_readtime:readtime); ioutils.write(( " - " + boundary + "/r/n")。getBytes()、output); ioutils.write(( "content-disposition:form-data; name =/" media/"; filename =/" " + getFileName(mediapath) +"/"/r/n")。getBytes()、output); ioutils.write( "content-type:video/mp4/r/n/r/n" .getBytes()、output); inputStream = new BufferedInputStream(MediaTonn.getInputStream()); ioutils.copy(inputstream、output); //パートioutils.write(( " - " + boundary + "/r/n").getbytes(systemconfig.default_character_encoding)、output); ioutils.write( "content-disposition:form-data; name =/" description/";/r/n/r/n" .getBytes(SystemConfig.Default_Character_Encoding)、output); ioutils.write(( "{/" title/":/" " + title +"/"、/" Introduction/":/" " + introduction +"/"}").getBytes(systemconfig.default_character_encoding)、output); ioutils.write(( "/r/n - " + boundary + " - /r/n/r/n") mediaconn.disconnect(); //入力ストリームを取得しますresult = inputstreamtostring(conn.getInputStream()); }} catch(malformedurlexception e){e.printstacktrace(); } catch(protocolexception e){e.printstacktrace(); } catch(ioException e){new IoException( "Data Error"を読む "); }最後に{ioutils.closequetly(output); ioutils.closequetly(inputstream); } return result; }上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。